簡體   English   中英

FileUploadBase在上傳小文件時找不到任何多部分

[英]FileUploadBase does not find any multipart parts when uploading small files

我使用Spring的CommonsMultipartResolver來處理servlet 3環境中的文件上傳。

如果上傳的文件很大,一切正常。

如果上載的文件較小,則解析程序無法發現任何部分(不會拋出異常)。

我已將此跟蹤到apache.commons.fileupload.FileItemIteratorImpl ,其中findNextItem()方法返回false,盡管帖子中有多個有效部分。 這導致我的控制器方法沒有可用的MultipartFile對象。

當我在HttpServletRequest查看調試器時,我看到正確的部件數量( getParts()返回正確的部件數量)。

我可以使用HttpServletRequest ,但對於大文件(> 1MB),會拋出一個關於最大文件大小的異常(我已經為CommonsMultipartResolver成功配置但顯然沒有交叉到HttpServletRequest )。

我看了一下嘗試配置Servlet 3的最大文件大小,但我不想在我的應用程序中添加幾個新類來設置該大小。

有沒有辦法使用Servlet 3和commons-fileupload上傳較小的文件?

更多

我有commons-fileupload配置為maxUploadSizePerFile = 100MB。

以下行為導致:

如果上傳的文件大於10MB,那么commons-fileupload處理它,一切都很好。

如果上傳的文件介於~3.8 MB和10 MB之間,則在commons-fileupload有機會解析導致瀏覽器中的連接重置消息的請求之前,輸入流和底層連接都將關閉。

對於介於1 MB和~3.8 MB之間的上載文件,輸入流將關閉,但不會關閉底層連接,從而允許我的錯誤頁面顯示錯誤。

最后,如果上傳的文件小於1 MB,則底層servlet 3實現在調用commons-fileupload之前成功處理部件,使commons-fileupload認為請求中沒有部件。

這種行為是因為使用Spring Boot(以前我不知道)會自動為Servlet 3配置多部分。這會導致底層的HttpServletRequestcommons-fileupload有機會之前處理文件上傳。

我在這一點上唯一感到好奇的是,如果上傳的文件足夠大,它就不會失敗。

是的,這完全是由於彈簧靴在路上跳躍並試圖幫助你,這在這種情況下會導致問題。 以下是修復它的步驟:

將CommonsMultipartResolver配置為bean(很可能你已經這樣做了):

@Bean(name = "multipartResolver")
public CommonsMultipartResolver multipartResolver() {
    CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
    return multipartResolver;
}

在application.properties文件中禁用spring servlet multipart處理

spring.servlet.multipart.enabled=false

然后以極大的熱情歡喜快樂。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM