您的位置:首页 > 编程语言 > Java开发

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) {
}
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐