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) {
}
}
}
}
}
spring环境实现FTP文件上传下载
最新推荐文章于 2024-08-07 14:54:11 发布