spring环境实现FTP文件上传下载
2017-02-09 17:03
471 查看
package com.test.action; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.net.ftp.FTP; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPFile; import org.apache.commons.net.ftp.FTPReply; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.multipart.MultipartFile; /** * * @author longwang * @date 2016-11-8 */ @Controller @RequestMapping("/ftp") public class FtpAction { @RequestMapping("/ftpPage") public String abc(){ return "/jsp/ftpPage"; } @RequestMapping("/uploadFile") public void upload(@RequestParam("file") MultipartFile uploadFile,HttpServletRequest request) { FTPClient ftpClient = new FTPClient(); try { request.setCharacterEncoding("utf-8"); ftpClient.connect("203.175.137.84", 21); ftpClient.login("lw_test", "12345678"); ftpClient.enterLocalPassiveMode(); ftpClient.setFileType(FTP.BINARY_FILE_TYPE); // 设置上传目录 must ftpClient.changeWorkingDirectory("/upload_test"); String fileName = new String(uploadFile.getOriginalFilename() .getBytes("gbk"), "iso-8859-1"); FTPFile[] fs = ftpClient.listFiles(fileName); if (fs.length==0) { System.out.println("this file not exist ftp"); }else if(fs.length==1){ System.out.println("this file exist ftp"); ftpClient.deleteFile(fs[0].getName()); } /*FTPFile[] fs = ftpClient.listFiles(); if (fs != null && fs.length > 0) { for (int i = 0; i < fs.length; i++) { if (fs[i].getName().equals(fileName)) { //System.out.println("fs[i].getName()=="+fs[i].getName()); ftpClient.deleteFile(fs[i].getName()); break; } } }*/ InputStream is = uploadFile.getInputStream(); ftpClient.storeFile(fileName, is); is.close(); //OutputStream os = ftpClient.appendFileStream(fileName); //byte[] bytes = new byte[1024]; // 开始复制 其实net已经提供了上传的函数,但是我想可能是我这个版本有点问题 //ftpClient.storeFile("", // fis); // 于是我自己write出去了,其实我想都是一样的效果,在这里告诉大家这两种方式都能实 // 暂未考虑中途终止的情况 /*int c; while ((c = is.read(bytes)) != -1) { os.write(bytes, 0, c); } os.flush(); is.close(); os.close();*/ } catch (IOException e) { e.printStackTrace(); } finally { try { ftpClient.disconnect(); System.out.println("上传完成。。。"); } catch (IOException e) { e.printStackTrace(); } } } @RequestMapping(value = "/downloadFile") public void downloadConfigFile(HttpServletResponse response, @RequestParam("fileName") String fileName,HttpServletRequest request) { FTPClient ftpClient = new FTPClient(); try { int reply; ftpClient.connect("203.175.137.84", 21); ftpClient.login("lw_test", "12345678"); reply = f 4000 tpClient.getReplyCode(); if (!FTPReply.isPositiveCompletion(reply)) { ftpClient.disconnect(); return; } ftpClient.changeWorkingDirectory("/upload_test");// 转移到FTP服务器目录 FTPFile[] fs = ftpClient.listFiles(new String(fileName.getBytes("gbk"), "iso-8859-1")); if (fs.length==1) { // String saveAsFileName = new String(fs[0].getName() // .getBytes(), "utf-8"); // System.out.println(fs[0].getName()+"\t"+saveAsFileName); response.setHeader("Content-Disposition", "attachment;fileName=" + fs[0].getName()); OutputStream os = response.getOutputStream(); ftpClient.retrieveFile(fs[0].getName(), os); os.flush(); os.close(); } /* FTPFile[] fs = ftpClient.listFiles(); for (int i = 0; i < fs.length; i++) { if (fs[i].getName().equals( new String(fileName.getBytes("gbk"), "iso-8859-1"))) { System.out.println(fs[i].getName()+"\t"+fileName); String saveAsFileName = new String(fs[i].getName() .getBytes(), "utf-8"); response.setHeader("Content-Disposition", "attachment;fileName=" + saveAsFileName); OutputStream os = response.getOutputStream(); ftpClient.retrieveFile(saveAsFileName, os); os.flush(); os.close(); break; } }*/ ftpClient.logout(); } catch (IOException e) { e.printStackTrace(); } finally { if (ftpClient.isConnected()) { try { ftpClient.disconnect(); } catch (IOException ioe) { } } } } }
相关文章推荐
- 使用.net FtpWebRequest 实现FTP常用功能 上传 下载 获取文件列表 移动 切换目录 改名
- 本周的小任务:(java编程实现)网站上的文件下载后,再FTP上传
- java实现ftp文件上传下载
- Microsoft .NET Framework 2.0对文件传输协议(FTP)操作(上传,下载,新建,删除,FTP间传送文件等)实现汇总1
- 利用FTPClient类实现文件的上传下载功能
- .Net 2.0对文件传输协议(FTP)操作(上传,下载,新建,删除,FTP间传送文件等)实现汇总
- php下连接ftp实现文件的上传、下载、删除文件实例代码
- oracle 调用Java 实现ftp文件的上传和下载 问题
- C#实现Ftp各种操作(上传,下载,删除文件,创建目录,删除目录,获得文件列表)
- Microsoft .NET Framework 2.0对文件传输协议(FTP)操作(上传,下载,新建,删除,FTP间传送文件等)实现汇总
- [转]文件传输协议(FTP)操作(上传,下载,新建,删除,FTP间传送文件等)实现汇总1
- Microsoft .NET Framework 2.0对文件传输协议(FTP)操作(上传,下载,新建,删除,FTP间传送文件等)实现汇总1
- 利用Socket 实现 FTP 文件上传和文件下载
- 利用Indy的TIdFtp控件实现FTP协议, 远程下载上传文件
- php下连接ftp实现文件的上传、下载、删除文件实例代码
- Microsoft .NET Framework 2.0对文件传输协议(FTP)操作(上传,下载,新建,删除,FTP间传送文件等)实现汇总1
- JAVA实现FTP文件上传下载文件
- ACTIVEX实现大文件FTP上传下载---上
- 【转】使用FtpClient类实现FTP文件上传下载
- Linux综合辅导:LinuxShell实现ftp自动上传下载文件