|
|
@ -18,7 +18,11 @@ import org.slf4j.Logger; |
|
|
import org.slf4j.LoggerFactory; |
|
|
import org.slf4j.LoggerFactory; |
|
|
import org.springframework.beans.factory.annotation.Value; |
|
|
import org.springframework.beans.factory.annotation.Value; |
|
|
|
|
|
|
|
|
|
|
|
import javax.servlet.http.HttpServletResponse; |
|
|
import java.io.*; |
|
|
import java.io.*; |
|
|
|
|
|
import java.net.URLEncoder; |
|
|
|
|
|
import java.util.HashMap; |
|
|
|
|
|
import java.util.Map; |
|
|
|
|
|
|
|
|
/** |
|
|
/** |
|
|
* |
|
|
* |
|
|
@ -396,4 +400,104 @@ public class FTPUtils { |
|
|
} |
|
|
} |
|
|
return responseData; |
|
|
return responseData; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public static R downFtpFile( String path, String fileName, String newFileName, HttpServletResponse response){ |
|
|
|
|
|
R r = new R(); |
|
|
|
|
|
FTPClient ftpClient = getFTPClient(); |
|
|
|
|
|
//判断链接是否关闭 |
|
|
|
|
|
if(!ftpClient.isConnected()){ |
|
|
|
|
|
log.info("ftp链接出错!链接已关闭!"); |
|
|
|
|
|
r.put("msg" ,"ftp链接出错!"); |
|
|
|
|
|
r.put("success", false); |
|
|
|
|
|
return r; |
|
|
|
|
|
} |
|
|
|
|
|
//进入工作空间 |
|
|
|
|
|
boolean flag = true; |
|
|
|
|
|
try { |
|
|
|
|
|
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE); |
|
|
|
|
|
if(path == null || "".equals(path)){ |
|
|
|
|
|
path = "/"; |
|
|
|
|
|
} |
|
|
|
|
|
String name=new String(path.getBytes("UTF-8"),"iso-8859-1"); |
|
|
|
|
|
flag = ftpClient.changeWorkingDirectory(name); |
|
|
|
|
|
// flag = ftpClient.changeWorkingDirectory("/"); |
|
|
|
|
|
if(!flag){ |
|
|
|
|
|
log.info("ftp链接出错!文件夹不存在!"); |
|
|
|
|
|
r.put("msg" ,"文件件不存在!"); |
|
|
|
|
|
r.put("success", false); |
|
|
|
|
|
return r; |
|
|
|
|
|
} |
|
|
|
|
|
//获取当前目录下的所有文件名称 |
|
|
|
|
|
ftpClient.sendCommand("OPTS UTF8 ON"); |
|
|
|
|
|
FTPFile[] ftpFiles = ftpClient.listFiles(); |
|
|
|
|
|
//文件存在是否存在的标记 |
|
|
|
|
|
boolean isExist = false; |
|
|
|
|
|
//循环判断文件 |
|
|
|
|
|
for(int i = 0; i<ftpFiles.length; i++){ |
|
|
|
|
|
String temp_name = new String(ftpFiles[i].getName().getBytes("iso-8859-1"), "UTF-8"); |
|
|
|
|
|
if(fileName.equals(temp_name)){ |
|
|
|
|
|
log.info("文件开始下载!文件名称:"+fileName); |
|
|
|
|
|
isExist = true; |
|
|
|
|
|
InputStream fis = ftpClient.retrieveFileStream(ftpFiles[i].getName()); |
|
|
|
|
|
// InputStream fis = new BufferedInputStream(new FileInputStream(temp_file)); |
|
|
|
|
|
byte[] buffer = new byte[fis.available()]; |
|
|
|
|
|
// fis.read(buffer); |
|
|
|
|
|
// fis.close(); |
|
|
|
|
|
// 取得文件名。 |
|
|
|
|
|
// 清空response |
|
|
|
|
|
response.reset(); |
|
|
|
|
|
if(newFileName != null && !"".equals(newFileName)){ |
|
|
|
|
|
fileName = newFileName; |
|
|
|
|
|
} |
|
|
|
|
|
// 设置response的Header |
|
|
|
|
|
response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8")); |
|
|
|
|
|
response.addHeader("Content-Length", "" + ftpFiles[i].getSize()); |
|
|
|
|
|
response.setContentType("application/octet-stream"); |
|
|
|
|
|
response.setCharacterEncoding("UTF-8"); |
|
|
|
|
|
OutputStream toClient = new BufferedOutputStream(response.getOutputStream()); |
|
|
|
|
|
int length; |
|
|
|
|
|
while((length=fis.read(buffer))>0){ //把文件流写到缓冲区里 |
|
|
|
|
|
toClient.write(buffer,0,length); |
|
|
|
|
|
} |
|
|
|
|
|
toClient.write(buffer); |
|
|
|
|
|
toClient.flush(); |
|
|
|
|
|
fis.close(); |
|
|
|
|
|
toClient.close(); |
|
|
|
|
|
log.info("文件下载完成!文件名称:"+fileName); |
|
|
|
|
|
break; |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
ftpClient.completePendingCommand(); |
|
|
|
|
|
if(isExist){ |
|
|
|
|
|
r.put("msg" ,"ftp下载成功!"); |
|
|
|
|
|
r.put("success", true); |
|
|
|
|
|
}else{ |
|
|
|
|
|
r.put("msg" ,"ftp下载失败!"); |
|
|
|
|
|
r.put("success", false); |
|
|
|
|
|
} |
|
|
|
|
|
} catch (IOException e) { |
|
|
|
|
|
log.info("ftp下载出错!错误信息:"+e.getMessage()); |
|
|
|
|
|
// TODO Auto-generated catch block |
|
|
|
|
|
e.printStackTrace(); |
|
|
|
|
|
}finally { |
|
|
|
|
|
|
|
|
|
|
|
//关闭流和链接 |
|
|
|
|
|
try { |
|
|
|
|
|
// if(fos!=null){ |
|
|
|
|
|
// fos.close(); |
|
|
|
|
|
// |
|
|
|
|
|
// } |
|
|
|
|
|
if(ftpClient!=null){ |
|
|
|
|
|
ftpClient.logout(); |
|
|
|
|
|
// ftpClient.disconnect(); |
|
|
|
|
|
} |
|
|
|
|
|
} catch (IOException e) { |
|
|
|
|
|
log.info("关闭流和链接出错!错误信息:"+e.getMessage()); |
|
|
|
|
|
// TODO Auto-generated catch block |
|
|
|
|
|
e.printStackTrace(); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
return r; |
|
|
|
|
|
} |
|
|
} |
|
|
} |