如何在 Spring Boot 中更改 Multipart 文件的最大大小?
Posted
技术标签:
【中文标题】如何在 Spring Boot 中更改 Multipart 文件的最大大小?【英文标题】:How to change the maximum size for a Multipart file in spring boot? 【发布时间】:2019-03-15 10:32:36 【问题描述】:我尝试使用邮递员上传歌曲,但出现类似 字段歌曲超出其允许的最大大小 1048576 字节的错误。"
我已经尝试在 application.properties 文件中添加此配置,但它不起作用:
spring.servlet.multipart.max-file-size=10MB spring.servlet.multipart.max-request-size=10MB
确切地说,这适用于大小为
这是我的控制器:
@PostMapping("/songs")
public ResponseEntity<?> insertSong( @RequestParam(value = "title") String title, @RequestParam(value = "song") MultipartFile file) throws IOException
Song song= new Song(title);
songService.insertSong(song, file);
return ResponseEntity.ok("song inserted");
这是我的服务:
@Service
public class SongServiceImpl implements SongService
@Autowired
SongRepository songRepository;
@Value("$dir.songs")
private String songsFolderPath;
@Override
public void insertSong(Song song, MultipartFile file) throws IOException
if(!(file.isEmpty()))
song.setSongPath(file.getOriginalFilename());
songRepository.save(song);
if (!(file.isEmpty()))
song.setSongPath(file.getOriginalFilename());
file.transferTo(new
File(songsFolderPath+song.getSong_ID()));
这是我的错误消息: "timestamp":"2018-10-10T13:27:07.090+0000","status":500,"error":"Internal Server Error","message":"最大上传大小超出;嵌套异常is java.lang.IllegalStateException: org.apache.tomcat.util.http.fileupload.FileUploadBase$FileSizeLimitExceededException: 现场歌曲超过其最大允许大小 1048576 字节。","path":"/music-service/songs"
我使用微服务,我的配置在 gitLab 上,是这个:
我使用 postman 来插入 i 文件:
【问题讨论】:
您能告诉我们更多关于您的 Spring Boot 版本的信息吗? 在我的情况下没有答案 @flyordie 你找到答案了吗? 【参考方案1】:对于 spring-boot 版本 2.x.x,通过包含 http 尝试使用以下代码。
spring.http.multipart.max-file-size=300MB
spring.http.multipart.max-request-size=300MB
参考set-maxfilesize
【讨论】:
我的答案不是投票-1而是阅读帖子,他已经有了这些设置。 @ValerioMC - 设置不一样,请注意 spring.http.* 与 spring.servlet.*。然而,他的回答也误导了 OP,因为 v2.x 版本(除了非常早期的 2.x beta 版本)使用了 OP 发布的设置,而 spring boot v1.x 版本使用了 spring.http.* 设置。但是,最可能的答案是 OP 使用 spring boot v1.x 并且这些设置应该可以工作,不管 Alien 自己遗漏了事实 我认为这个方法在 spring 2.0Deprecated configuration property 'spring.http.multipart.max-file-size' more... (Ctrl+F1)
987654323@【参考方案2】:
更新的 SpringBoot 2.0.0.RELEASE
Web 应用程序中的分段大小取决于两个单独的设置
1) 应用设置:通过application.properties
中的Spring Boot配置实现
//SpringBoot 2.1.2.RELEASE
spring.servlet.multipart.max-file-size=100MB
spring.servlet.multipart.max-request-size=100MB
2) 服务器设置:此设置高于应用程序设置。在 Spring Boot 中,这个服务器配置可以通过两种方式完成
2.1) 在嵌入式 tomcat 中,正如您在以下链接中找到的 EMBEDDED_TOMCAT_MAX_SHALLOW_SIZE(部署 .war
文件时这还不够)(无需在 2.1.2.RELEASE 中执行此操作)
2.2) 在独立服务器中:在文件TOMCAT_HOME/conf/server.xml
中找到部分<Connector port=“8080"
并添加属性maxSwallowSize=“-1"/>
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
maxSwallowSize="-1"/>
使用-1
,您将禁用服务器上的大小控制,现在只有 spring 应用程序上的设置才重要
此外,因为您正在处理文件,我认为您应该设置最适合您的 API 的 MediaType
(在我的情况下,我有文件 + 额外的 json 元素)
@PostMapping(value = "/path", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
并在调用 REST-API 时尊重标头
headers.setContentType(MediaType.MULTIPART_FORM_DATA_VALUE)
【讨论】:
我使用的是rest api,所以我用邮递员测试我认为我不需要表单method="POST" enctype="multipart/form-data"
我明白了。尝试更改maxShallowSize
,它应该可以工作。
你知道如何改变它吗?因为没有属性,所以我看到了这个教程:mkyong.com/spring-boot/…
您发送的链接是针对嵌入式tomcat的,如果您将应用程序部署在外部服务器上,它仍然不起作用。更新答案,详细说明如何更改 maxSwallowSize
但目前我将使用嵌入的 tomcat。明天我将对其进行测试,然后我会返回答案【参考方案3】:
一个疯狂的猜测 - 您可能正在使用 spring boot 1.x,并且您可能正在尝试使用 spring boot 2.x 中的设置。
实现 spring boot v1.x 所需设置的正确属性如下:
spring.http.multipart.max-file-size=-1
spring.http.multipart.max-request-size=-1
spring.http.multipart.enabled=true
我的猜测是基于您在 config/properties 文件中设置了不同的文件大小,但您似乎遇到了默认值。
【讨论】:
以上是关于如何在 Spring Boot 中更改 Multipart 文件的最大大小?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Spring Boot 中更改 Multipart 文件的最大大小?
如何在 Spring Boot Restful 中更改大量数据(更新多个数据)
Spring Boot Multi-Module maven 项目重新打包失败