2009-12-23 117 views
7

當一個文件說從瀏覽器上傳100 MB大小時,Spring會將全部數據保存在內存中或臨時存儲在磁盤中。在閱讀Spring文檔之後,我知道如何設置臨時目錄,但是我想知道如果我不提及它會發生什麼。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的 「文件」 的對象認爲,100點MB的數據?

回答

10

javadoc中多挖一點,表明默認的最大內存容量是10240字節。從這個角度我假設任何小於10kB的上傳被保存在內存中,任何更大的內容都將被存儲在磁盤上。如果你不指定磁盤位置,它可能會使用默認值(我猜它會使用系統默認的tmp目錄)。

2

如果未設置臨時目錄CommonsMultipartResolver會將臨時文件保存到servlet容器的臨時目錄中。

您示例中的「文件」對象不保存與java.io.File引用類似的數據。您需要使用file.getBytes()獲取數據。

2

是的,但是如果它存儲在磁盤上,它將在請求處理後被刪除。您可以設置閾值時,它會被存儲在磁盤上:

在你multipartresolver bean定義,如:

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

如果它在內存中得舉辦,您可以將其存儲在會話和處理它下一個請求,例如,如果您正在等待用戶確認。