Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring会将内容保存在内存中还是存储在磁盘中?_Java_Spring Mvc_Apache Commons Fileupload - Fatal编程技术网

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

Java Spring会将内容保存在内存中还是存储在磁盘中?,java,spring-mvc,apache-commons-fileupload,Java,Spring Mvc,Apache Commons Fileupload,当从浏览器上传一个100 MB大小的文件时,Spring会将整个数据保存在内存中或临时存储在磁盘中。在经历了SpringDoc之后,我知道如何设置临时目录,但我想知道如果我不提及这一点会发生什么 我有以下声明: <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/> 上面bean中的“file”对象是否能保存100 MB的数据?

当从浏览器上传一个100 MB大小的文件时,Spring会将整个数据保存在内存中或临时存储在磁盘中。在经历了SpringDoc之后,我知道如何设置临时目录,但我想知道如果我不提及这一点会发生什么

我有以下声明:

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

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

再深入一点,就会发现默认的最大内存大小是10240字节。从这一点出发,我假设任何小于10kB的上传都保存在内存中,任何较大的上传都将存储在磁盘上。如果不指定磁盘位置,它可能会使用默认目录(我猜它将使用系统默认的tmp目录)。

如果不设置临时目录CommonsMultipartResolver将临时文件保存到servlet容器的临时目录


示例中的“file”对象不包含与java.io.file引用类似的数据。您需要使用
file.getBytes()
获取数据,但如果数据存储在磁盘上,则在处理请求后会将其删除。您可以设置存储在磁盘上的时间阈值:

在您的multipartresolver bean定义中,例如:

<property name="maxUploadSize" value="1000000" /> 
<property name="maxInMemorySize" value="1000" /> 


如果它保存在内存中,您可以将其存储在会话中,并在下一个请求中处理它,例如,如果您正在等待用户确认。

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

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

链接:

注意此处实现中的一些错误:

<property name="maxUploadSize" value="1000000" /> 
<property name="maxInMemorySize" value="1000" />