如何在 Spring Boot 中将大文件上传到 ftps 服务器?

Posted

技术标签:

【中文标题】如何在 Spring Boot 中将大文件上传到 ftps 服务器?【英文标题】:How to upload a large file to ftps server in SpringBoot? 【发布时间】:2020-09-07 03:21:36 【问题描述】:

我想上传一个文件到 ftps 服务器。下面的代码适用于像 10KB 这样的小文件。但我需要上传 5-10 MB 的文件。并且错误带有以下错误行。有人可以帮我弄这个吗?下面是我尝试过的代码。有没有更好的方法来做到这一点?

错误线

boolean result = con.storeFile(FILE_NAME, multipartFile.getInputStream());

代码

public void createDeviceVersion(MultipartFile multipartFile) 

 String FTP_ADDRESS = backendConfigRepo.findByConfigKey(KeyConstant.FTP_ADDRESS).getConfigValue();
 int FTP_PORT = Integer.parseInt(backendConfigRepo.findByConfigKey(KeyConstant.FTP_PORT).getConfigValue());
 String USER = backendConfigRepo.findByConfigKey(KeyConstant.FTP_USER).getConfigValue();
 String PASSWORD = backendConfigRepo.findByConfigKey(KeyConstant.FTP_PASSWORD).getConfigValue();
 String FILE_NAME = backendConfigRepo.findByConfigKey(KeyConstant.MCASH_VERSION_FILE_NAME).getConfigValue();
 FTPSClient con = null;

 try 
  con = new FTPSClient(true);
  con.connect(FTP_ADDRESS, FTP_PORT);

  if (con.login(USER, PASSWORD)) 
   con.enterLocalPassiveMode();
   con.setFileType(FTP.BINARY_FILE_TYPE);
   boolean result = con.storeFile(FILE_NAME, multipartFile.getInputStream());
   System.out.println(result);
   con.logout();
   con.disconnect();

  

  catch (Exception e) 
  e.printStackTrace();
 


错误信息

org.apache.commons.net.io.CopyStreamException: IOException 被捕获 复制时。在 org.apache.commons.net.io.Util.copyStream(Util.java:136) 在 org.apache.commons.net.ftp.FTPClient._storeFile(FTPClient.java:675) 在 org.apache.commons.net.ftp.FTPClient.__storeFile(FTPClient.java:639) 在 org.apache.commons.net.ftp.FTPClient.storeFile(FTPClient.java:2160) .... 引起:java.net.SocketException: Connection reset by peer: socket write error

【问题讨论】:

您为什么不尝试使用一些 ssh 库,例如 JSch、SSHJ?有什么限制吗? 我对 ftps 服务器了解不多。我只想将文件上传到 ftps 服务器。你说的限制是什么意思?这个错误伴随着 storeFile 行。 【参考方案1】:

您是否尝试过更改 webapps/manager/WEB-INF/web.xml 中的最大大小? 我认为这可能会对您有所帮助Max limit of multi part file

【讨论】:

是的,我已经这样做了。 # 多部分内容配置 spring.servlet.multipart.enabled=true spring.servlet.multipart.file-size-threshold=5KB spring.servlet.multipart.max-file-size=500MB spring.servlet.multipart.max-request-size =515MB spring.messages.fallback-to-system-locale=false 谢谢。

以上是关于如何在 Spring Boot 中将大文件上传到 ftps 服务器?的主要内容,如果未能解决你的问题,请参考以下文章

如何在弹性beantalk中将PostgreSQL RDS连接到spring boot?

如何在 Wildfly 中将外部属性文件加载到 Spring Boot

Spring Boot实现分片上传断点续传大文件极速秒传-备忘

Spring Boot 分片上传断点续传大文件上传秒传,应有尽有,建议收藏!!

spring boot 大文件上传实现方式

如何使用嵌入式 tomcat 在 Spring Boot 中增加文件大小上传限制