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

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

我有以下声明:

 

豆 :

 public class FileHolder { private MultipartFile file; public void setFile(MultipartFile file) { this.file = file; } public MultipartFile getFile() { return file; } } 

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

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

如果没有设置临时目录, CommonsMultipartResolver会将临时文件保存到servlet容器的临时目录中。

示例中的“file”对象不包含与java.io.File引用类似的数据。 您需要使用file.getBytes()获取数据。

是的,但是如果它存储在磁盘上,它将在处理完请求后被删除。 您可以设置何时存储在磁盘上的阈值:

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

   

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