博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
通过ftp模拟网盘
阅读量:4971 次
发布时间:2019-06-12

本文共 4402 字,大约阅读时间需要 14 分钟。

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,通过网页访问 效果如下:

出处: 作者:伫望碧落

 

转载于:https://www.cnblogs.com/dyllove98/p/3231125.html

你可能感兴趣的文章
.vimrc配置
查看>>
Nginx Configuration 免费HTTPS加密证书
查看>>
Mysql优化
查看>>
iOS programming UITabBarController
查看>>
如何弹出一个模式窗口来显示进度条
查看>>
C#与matlab混合编程(1)多元线性回归
查看>>
护网杯划水
查看>>
(转)Android 仿订单出票效果 (附DEMO)
查看>>
高薪是怎么跳出来的
查看>>
jvm栈-运行控制,jvm-堆运行存储共享单元
查看>>
数据库多张表导出到excel
查看>>
jekyll bootstrap更改主题theme
查看>>
POJ1300(欧拉回路)
查看>>
快速智能数据导入工具1.0
查看>>
态度决定品质
查看>>
NPOI Excel 单元格背景颜色对照表
查看>>
微信小程序去除button默认样式
查看>>
11/26
查看>>
Where does Visual Studio look for C++ Header files?
查看>>
Java打包可执行jar包 包含外部文件
查看>>