Java Spring会将内容保存在内存中还是存储在磁盘中?
当从浏览器上传一个100 MB大小的文件时,Spring会将整个数据保存在内存中或临时存储在磁盘中。在经历了SpringDoc之后,我知道如何设置临时目录,但我想知道如果我不提及这一点会发生什么 我有以下声明: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的数据?
<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" />