Browse Source

荣兴 FTP-zww

master
zuowenwen 4 years ago
parent
commit
b0a219d0c9
  1. 21
      src/main/java/com/gaotao/modules/ftp/controller/SysFtpController.java
  2. 104
      src/main/java/com/gaotao/modules/ftp/util/FTPUtils.java

21
src/main/java/com/gaotao/modules/ftp/controller/SysFtpController.java

@ -18,6 +18,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.File; import java.io.File;
import java.io.FileOutputStream; import java.io.FileOutputStream;
import java.io.InputStream; import java.io.InputStream;
@ -76,7 +77,7 @@ public class SysFtpController extends AbstractController {
dir.delete(); dir.delete();
ossEntity.setUrl(r.get("url").toString()); ossEntity.setUrl(r.get("url").toString());
ossEntity.setCreatedBy(user.getUsername()); ossEntity.setCreatedBy(user.getUsername());
ossEntity.setFileName(fileName);
ossEntity.setFileName(fileName+suffix);
ossEntity.setNewFileName(newFileName); ossEntity.setNewFileName(newFileName);
ossEntity.setCreateDate(new Date()); ossEntity.setCreateDate(new Date());
sysOssService.save(ossEntity); sysOssService.save(ossEntity);
@ -142,5 +143,21 @@ public class SysFtpController extends AbstractController {
} }
} }
/**
* @Method upload
* @Description: FTP文件下载
* @author zuowenwen
* @Version 1.0
* @param id
* @param response
* @return com.gaotao.common.utils.R
* @throws
* @date 2021/9/29
*/
@GetMapping("/downFtpFile")
public R upload(@RequestParam("ossEntity") Long id ,HttpServletResponse response){
SysOssEntity resultData =sysOssService.getById(id);
R r = FTPUtils.downFtpFile("",resultData.getNewFileName(),resultData.getFileName() ,response);
return r;
}
} }

104
src/main/java/com/gaotao/modules/ftp/util/FTPUtils.java

@ -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;
}
} }
Loading…
Cancel
Save