項目中需要上傳一些較大的文件,都是一些壓縮備份文件,動不動就幾百M。系統框架SSH,必然用Struts。而Struts提供了 FormFile類來上傳文件。起初一切正常,上傳下載的都沒問題,但過了一段時間后客戶提出大于300M的文件上傳不上去。測試后發現果真如此,但是后臺并不報錯,直接返回下面的forward了。因為是初次使用,下面就是我一小天行走的過程。
起初,我開始到處搜尋網上的上傳文件下載,很多人用的都是apache得commons-fileupload.jar這個組件,而且代碼都貼出了,我隨便下了一個小demo,屢試不爽,別說300,500M也能傳上去,而且也用了Struts,我開始犯暈。我試著將我的環境與demo得環境代碼盡量相似,至少主要代碼應該差不多。我將目前系統中的上傳附件代碼改成了demo中的:
DiskFileUpload upload = new DiskFileUpload();
List uploadList = upload.parseRequest(request);
但是每次使用uploadList.size();時獲取到得都是0,根本傳布了。我更暈了。。。
我再次仔細的對比demo和系統,最后發現demo中沒有使用Struts的FormBean,會不會是這里的問題?于是我將demo中也增加了 FormBean類,標簽都用上了Struts的標簽,這次果然demo也失效了。。。終于被我發現,都是FormBean的問題,但現在我又不可能舍棄 FormBean,因為不僅僅是附件,還有別的很重要的一些屬性,代碼都寫好了,不可能大范圍修改,那咋辦?
為什么fileupload可以傳那么大,而你struts卻傳不上大于300M的文件?再次搜索,終于發現原因,Struts在寫 FormFile類時借助的是fileupload中的API,設置的默認大小為250M,難怪傳不上去!如何設置更大一些或更小一些呢?這樣:
在Struts配置文件的mapping標簽后加上
<controller maxFileSize="1024M" />
看到這個小標簽頁不用解釋什么了吧!我設置了1G,現在傳只要小于1G的附件都沒問題了!