Spring会将内容保存在内存中还是存储在磁盘中?

当一个文件说100 MB大小从浏览器上传时,Spring会将整个数据保存在内存中或暂时存储在磁盘中。在完成春季文档后,我知道如何设置临时目录,但我想知道如果我不提到这一点会发生什么。

我有以下声明:

<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>

豆:

public class FileHolder {

    private MultipartFile file;

    public void setFile(MultipartFile file) {
        this.file = file;
    }

    public MultipartFile getFile() {
        return file;
    }
}

上述bean中的“file”对象是否保存100 MB数据?


答案 1

javadoc中进一步挖掘显示,默认的最大内存大小为10240字节。由此,我假设任何小于10kB的上传都保存在内存中,任何更大的上传都将存储在磁盘上。如果不指定磁盘位置,它可能会使用默认值(我猜它将使用系统默认的tmp目录)。


答案 2

在 Spring boot 中,指定将文件写入磁盘的大小阈值。spring.servlet.multipart.file-size-threshold

该属性的默认值为零。这意味着默认情况下,它将所有文件存储在临时位置(可以通过 配置)。spring.servlet.multipart.location

友情链接:弹簧开机属性

请注意此处实现中的一些错误:https://github.com/spring-projects/spring-boot/issues/9073


推荐