spring环境实现FTP文件上传下载

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 = ftpClient.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) {
				}
			}
		}
	}
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值