Posted on 2011-04-16 14:20
IceWee 閱讀(1478)
評(píng)論(0) 編輯 收藏 所屬分類(lèi):
Strut1
項(xiàng)目中需要上傳一些較大的文件,都是一些壓縮備份文件,動(dòng)不動(dòng)就幾百M(fèi)。系統(tǒng)框架SSH,必然用Struts。而Struts提供了 FormFile類(lèi)來(lái)上傳文件。起初一切正常,上傳下載的都沒(méi)問(wèn)題,但過(guò)了一段時(shí)間后客戶(hù)提出大于300M的文件上傳不上去。測(cè)試后發(fā)現(xiàn)果真如此,但是后臺(tái)并不報(bào)錯(cuò),直接返回下面的forward了。因?yàn)槭浅醮问褂茫旅婢褪俏乙恍√煨凶叩倪^(guò)程。
起初,我開(kāi)始到處搜尋網(wǎng)上的上傳文件下載,很多人用的都是apache得commons-fileupload.jar這個(gè)組件,而且代碼都貼出了,我隨便下了一個(gè)小demo,屢試不爽,別說(shuō)300,500M也能傳上去,而且也用了Struts,我開(kāi)始犯暈。我試著將我的環(huán)境與demo得環(huán)境代碼盡量相似,至少主要代碼應(yīng)該差不多。我將目前系統(tǒng)中的上傳附件代碼改成了demo中的:
DiskFileUpload upload = new DiskFileUpload();
List uploadList = upload.parseRequest(request);
但是每次使用uploadList.size();時(shí)獲取到得都是0,根本傳布了。我更暈了。。。
我再次仔細(xì)的對(duì)比demo和系統(tǒng),最后發(fā)現(xiàn)demo中沒(méi)有使用Struts的FormBean,會(huì)不會(huì)是這里的問(wèn)題?于是我將demo中也增加了 FormBean類(lèi),標(biāo)簽都用上了Struts的標(biāo)簽,這次果然demo也失效了。。。終于被我發(fā)現(xiàn),都是FormBean的問(wèn)題,但現(xiàn)在我又不可能舍棄 FormBean,因?yàn)椴粌H僅是附件,還有別的很重要的一些屬性,代碼都寫(xiě)好了,不可能大范圍修改,那咋辦?
為什么fileupload可以傳那么大,而你struts卻傳不上大于300M的文件?再次搜索,終于發(fā)現(xiàn)原因,Struts在寫(xiě) FormFile類(lèi)時(shí)借助的是fileupload中的API,設(shè)置的默認(rèn)大小為250M,難怪傳不上去!如何設(shè)置更大一些或更小一些呢?這樣:
在Struts配置文件的mapping標(biāo)簽后加上
<controller maxFileSize="1024M" />
看到這個(gè)小標(biāo)簽頁(yè)不用解釋什么了吧!我設(shè)置了1G,現(xiàn)在傳只要小于1G的附件都沒(méi)問(wèn)題了!