临时文件夹中的Tomcat Servlet 3.0多部分文件上传名称冲突

问题描述 投票:1回答:1

似乎Tomcat没有处理两个不同用户对同一多部分文件的并行上传。

测试

  • 两个会话/用户A和B.
  • 两者同时或多或少地上传一个名为foo.pdf的20MB文件
  • 具有默认配置的Servlet 3.0请求将这两个文件存储在tmp文件夹中
  • 两个线程都试图将foo.pdf写入tmp文件夹

结果

  • 上传的文档已损坏(写入两个流)
  • 较慢的请求将因FileNotFoundException而失败,因为tmp文件已被更快请求的清除任务删除。

有没有办法避免这种情况 - 除了设置fileSizeThreshold高于maxFileSize所以它永远不会被写入磁盘。

旁注:这是一个Spring Boot 2.1应用程序,但这是无关紧要的,因为它默认使用此Servlet 3.0实现。

spring-boot tomcat file-upload multipart
1个回答
0
投票

我有一个答案,但并不是真的令人满意。我们没有弄清楚如何使用Tomcat的Servlet 3.0实现。但是,一旦我们切换到Apache commons-fileupload,一切都很顺利。

所以,对于Spring (Boot) applications你会的

  • 设置spring.servlet.multipart.enabled: false
  • 配置一个名为CommonsMultipartResolvermultipartResolver类型的bean
  • 添加commons-fileupload依赖项
© www.soinside.com 2019 - 2024. All rights reserved.