如何在spring boot中更改Multipart文件的最大大小?

fly*_*die 5 spring spring-boot

我试着用邮递员上传一首歌,但是我有一个错误,比如场歌超过了允许的最大大小1048576字节."

我已经尝试在application.properties文件中添加此配置,但它不起作用:

spring.servlet.multipart.max-file-size = 10MB spring.servlet.multipart.max-request-size = 10MB

我确切地说,这适用于大小<1048576字节的文件

这是我的控制器:

@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");
    }
Run Code Online (Sandbox Code Playgroud)

这是我的服务:

@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()));
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

这是我的错误消息: {"timestamp":"2018-10-10T13:27:07.090 + 0000","status":500,"error":"内部服务器错误","消息":"最大上传超出大小;嵌套异常是java.lang.IllegalStateException:org.apache.tomcat.util.http.fileupload.FileUploadBase $ FileSizeLimitExceededException:场曲超过其最大允许大小1048576字节.","path":"/ music-服务/歌曲"}

我使用微服务,我的配置是在gitLab上,这是一个:

在此输入图像描述

我用这样的邮递员插入i文件:

在此输入图像描述

Val*_*oMC 7

更新 SpringBoot 2.0.0.RELEASE

Web 应用程序中的多部分大小取决于两个单独的设置

1)应用设置:通过Spring Boot中的配置实现application.properties

//SpringBoot 2.1.2.RELEASE
spring.servlet.multipart.max-file-size=100MB
spring.servlet.multipart.max-request-size=100MB
Run Code Online (Sandbox Code Playgroud)

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"/>
Run Code Online (Sandbox Code Playgroud)

随着-1您在服务器上禁用大小控制,现在只有您的 spring 应用程序上的设置很重要

此外,因为您正在处理文件,我认为您应该设置MediaType最适合您的 API(在我的情况下,我有文件 + 附加 json 元素)

@PostMapping(value = "/path", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
Run Code Online (Sandbox Code Playgroud)

并在调用 REST-API 时尊重标头

headers.setContentType(MediaType.MULTIPART_FORM_DATA_VALUE)
Run Code Online (Sandbox Code Playgroud)


Ali*_*ien 6

对于spring-boot版本2.xx,请尝试使用包含http的以下代码.

spring.http.multipart.max-file-size=300MB
spring.http.multipart.max-request-size=300MB
Run Code Online (Sandbox Code Playgroud)

请参阅set-maxfilesize

  • 我认为这种方法在 spring 2.0 中已被弃用`已弃用的配置属性'spring.http.multipart.max-file-size' 更多... (Ctrl+F1)` (2认同)