package com.xiaomo.ftp.down_upload;

import java.io.IOException;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import org.apache.commons.net.ftp.FTPClient;

import org.apache.commons.net.ftp.FTPFile;

import org.apache.commons.net.ftp.FTPReply;

一、建立一个类,用来获取ftp对应目录下的目录和文件信息。

public class ListMapFtp {

public static List<Map> showList(String hostname,int port,String username,String password,String pathname) throws IOException{


FTPClient ftpClient = new FTPClient();


List<String> list = new ArrayList<String>();

List<Map> listMap = new ArrayList<Map>();

Map<String, String> mapFile = new HashMap<String, String>();


Map<String, String> mapDirectory = new HashMap<String, String>();


try{


int reply;


ftpClient.connect(hostname, port);


ftpClient.login(username, password);


reply = ftpClient.getReplyCode();


if(!FTPReply.isPositiveCompletion(reply)){


ftpClient.disconnect();


}


ftpClient.changeWorkingDirectory(pathname+"/");

FTPFile[] ftpFiles = ftpClient.listFiles();

for(FTPFile ftpFile:ftpFiles){


if(ftpFile.getType()==1&&!ftpFile.getName().equals(".")&&!ftpFile.getName().equals("..")){


list.add(pathname+"/"+ftpFile.getName());


mapDirectory.put(ftpFile.getName(), pathname+"/"+ftpFile.getName());


}


}

for(FTPFile ftpFile:ftpFiles){


if(ftpFile.getType()==0){


list.add(ftpFile.getName());


}


}


listMap.add(mapDirectory);


listMap.add(mapFile);


ftpClient .logout();


} finally {


if (ftpClient.isConnected()) {


try {


ftpClient.disconnect();


} catch (IOException ioe) {


ioe.printStackTrace();


}


}


}


return listMap;


}

}

二、建立一个servlet类,通过网页显示对应的ftp目录和文件信息

package com.xiaomo.ftp.down_upload;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class ServletFtp extends HttpServlet {
ListMapFtp listMapFtp = null;
DownloadFtp downloadFtp = null;

public void service(HttpServletRequest request,HttpServletResponse response)
throws ServletException ,IOException{
String appPath = request.getContextPath();//获得当前项目的相对路径
HttpSession session = request.getSession();
String remotePath = request.getParameter("remotePath");//获得当前路径
if(remotePath!=null){
System.out.println("remotePath:"+remotePath);
session.setAttribute("sessionPath", remotePath);//将当前路径保存到session中
}
if(remotePath==null){
remotePath = "";
}
String filename = request.getParameter("filename");//获得当前文件的名称
if(filename!=null){
System.out.println("filename: "+filename);
}
listMapFtp = new ListMapFtp();
List<Map> list = listMapFtp.showList("192.168.**.**", 21, "*****", "******",remotePath);//获得ftp对应路径下的所有目录和文件信息
Map<String,String> mapDirectory = list.get(0);//获得ftp该路径下的所有目录信息
Map<String,String> mapFile = list.get(1);//获得ftp该路径下所有的文件信息

PrintWriter out = response .getWriter();
out.print("<html><head><title>信息提示页</title></head><body>");
out.print("<a style='color:red' href='http://localhost:8080/xiaomo/ftpList?remotePath='>首页</a><br/><br/>");
if(remotePath!=null&&filename==null){//如果前台点击的是目录则显示该目录下的所有目录和文件
if(mapDirectory.size()>1){
//out.println("<h3>目录</h3>");
for(String str  : mapDirectory.keySet()){
         out.print("<img src='"+appPath+"/pic/directory.jpg' width='25px' height='25px'>&nbsp<a style='color:blue' href='http://localhost:8080/xiaomo/ftpList?remotePath="+mapDirectory.get(str)+"'>"+str+"</a><br/>");
   }
}
if(mapFile.size()>1){
//out.println("<h3>文件</h3>");
for(String str  : mapFile.keySet()){
out.print("<img src='"+appPath+"/pic/file.jpg' width='20px' height='20px'>&nbsp<a style='color:green' href='http://localhost:8080/xiaomo/ftpList?filename="+mapFile.get(str)+"'>"+str+"</a><br/>");
   }
}
}else if(filename!=null){//如果前台点击的是文件,则下载该文件
downloadFtp = new DownloadFtp();
String sessionPath = (String) session.getAttribute("sessionPath");//获得保存在session中的当前路径信息
System.out.println("session--->sessionPath"+sessionPath);
downloadFtp.downFile("192.168.50.23", 21, "admin", "123456",sessionPath,filename, "D:/test/download/");
//调用方法下载该文件
out.println("<h3>"+filename+" 下载成功!</h3>");
out.print("<a style='color:blue' href='http://localhost:8080/xiaomo/ftpList?remotePath="+sessionPath+"'>返回</a><br/>");
}
out.print("</body></html>");
}

}

三、配置web.xml,通过网页访问http://localhost:8080/xiaomo/ftpList 效果如下:

出处:http://blog.csdn.net/cl05300629/article/details/9703539 作者:伫望碧落

通过ftp模拟网盘的更多相关文章

  1. FTP作业

    实现一个FTP网盘的功能 pa's's

  2. 使用Apache FtpServer搭建FTP服务器 [FlashFXP]

    <server xmlns="http://mina.apache.org/ftpserver/spring/v1" xmlns:xsi="http://www.w ...

  3. day31并发

    以后你为之奋斗的两点: 提高cpu的利用率 提高用户的体验  1.纯概念/纯方法 操作系统的发展历程 #主要的人机矛盾是什么:CPU的使用率 #输入\输出数据和CPU计算没有关系 #操作系统是怎么进化 ...

  4. day16 函数的用法:内置函数,匿名函数

    思维导图需要补全 : 一共有68个内置函数: #内置:python自带 # def func(): # a = 1 # b = 2 # print(locals()) # print(globals( ...

  5. python 全栈开发,Day39(进程同步控制(锁,信号量,事件),进程间通信(队列,生产者消费者模型))

    昨日内容回顾 python中启动子进程并发编程并发 :多段程序看起来是同时运行的ftp 网盘不支持并发socketserver 多进程 并发异步 两个进程 分别做不同的事情 创建新进程join :阻塞 ...

  6. time,sys,os 模块

    import time# 时间戳时间,格林威治时间,float数据类型 给机器用的 # 英国伦敦的时间 1970.1.1 0:0:0 # 北京时间 1970.1.1 8:0:0 # 153369312 ...

  7. os模块,sys模块

    # os模块 # os模块是与操作系统交互的一个接口 ''' 和工作目录相关: os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径(在什么地方执行就是那个文件的路径) os ...

  8. Windows Server 2003搭建FTP服务器 实现盘符之间切换

     Serv-U中设置虚拟目录的方法 如果在E盘下有一个名为LoveHina的目录,在F盘下也有一个名为LoveHina的目录.那么,如何让使用同一个账号的用户可以同时访问这两个目录呢? 我们可以使用S ...

  9. 实用程序Commer的开发——U盘内容可选同步至FTP服务器

    需求分析:需要在软件运行后将插入的U盘里面的文件Copy至本机上,然后可选的上传一部分至FTP服务器上. 系统设计:基于MFC的基本对话框程序:主要模块有检测U盘插入并复制文件以及上传到网络.通过对U ...

随机推荐

  1. 152. Maximum Product Subarray

    题目: Find the contiguous subarray within an array (containing at least one number) which has the larg ...

  2. java比较器Comparable接口和Comaprator接口

    Comparable故名思意是比较,意思就是做比较的,然后进行排序. 1.什么是comparable接口 此接口强行对实现它的每个类的对象进行整体排序.此排序被称为该类的自然排序 ,类的 compar ...

  3. 绕过kernel模块版本校验检测

    kernel module version check bypass . 举例说明 . 内核是怎么实现的 . 怎样去突破 . 总结 . 举例说明 Linux内核版本很多,升级很快,2个小内核版本中内核 ...

  4. 函数 xdes_get_state

    得到XDES Entry中状态 /**********************************************************************//** Gets the ...

  5. JS頁面值傳遞

    <script type="text/javascript"> function GetValue() { var url=location.search; var R ...

  6. Master Nginx(4) - Nginx as a Reverse Proxy

    Introduction to reverse proxying the proxy module legacy servers with cookies the upstream module ke ...

  7. javascript 中concat与push的区别

    1. push 遇到数组参数时,把整个数组参数作为一个元素:而 concat 则是拆开数组参数,一个元素一个元素地加进去. 2. push 直接改变当前数组:concat 不改变当前数组. 总结:如果 ...

  8. Sharepoint数据库存储过程

    转:http://dugan.bokee.com/630497.html Databases Table Stored Procedures(数据库表存储过程) Globals Table Store ...

  9. WeiXinMPSDK-微信C# SDK

    微信C# SDK 微信公众号:Senparc.Weixin.MP.dll 微信企业号:Senparc.Weixin.QY.dl 微信开放平台:Senparc.Weixin.Open.dll 本库为.N ...

  10. HtmlParser应用,使用Filter从爬取到的网页中获取需要的内容

    htmlparser是一个纯的java写的html解析的库,它不依赖于其它的java库文件,主要用于改造或提取html.它能超高速解析html,而且不会出错.现在htmlparser最新版本为2.0. ...