2012-10-15 40 views
4

我遇到了Struts 2及其文件上傳攔截器的問題。它已驗證我的內容類型和我的文件大小,但上傳過程不會停止。 比如我上傳限制爲2Mb和用戶發送帶有500MB的文件時,攔截器Struts 2的日誌文件過大,而是繼續上傳文件Struts2上傳文件,在發送文件之前驗證大小和內容類型文件

我想停止上傳過程,在錯誤的情況下,怎麼一回事,因爲在僅當發送文件完成時,struts2才返回到我的頁面。

感謝

+0

按我的理解,服務器可以驗證它之後沒有上傳文件。 –

+0

我不認爲你可以像服務器處理實際的物理上載一樣 - 標準的Http MultiPart表單處理,並且Struts在請求完成之前不能控制請求。您可以通過您的servlet容器/互聯網服務器來做些什麼 – user497087

回答

2

你在Struts中不能 - 從Struts沒有,直到你的servlet容器處理完它得到的迴應對象的保持。

但是 - 大多數容器都有控制上傳文件大小的方法,對於tomcat,這是maxPostSize參數(默認值是2GB) - 據我所知,tomcat會計算傳入字節數,然後退出if這個值被超過。即Tomcat將不會繼續讀取maxPostSize。其他容器將具有相似的配置參數。我從來沒有用過它,所以我不能在這裏得到任何進一步的幫助。

如果您有嵌套容器/發球(例如Tomcat的坐在後面的Apache Web服務器),請確保您配置正確的

+0

Hi @ user497087謝謝,真的,我不能攔截請求,直到它被處理。我在前面使用帶有Apache的Jetty。我將看看如何配置Jetty。 –

-1

可以。嘗試這個。它的工作原理..

<action name="uploadDocs" class="com.test.myapp.UploadAction" method="upload"> 
    <interceptor-ref name="fileUpload"> 
     <param name="maximumSize">2097152</param> <!-- Max 2 MB limit per file--> 
     <param name="allowedTypes">image/jpeg,image/bmp</param> 
    </interceptor-ref> 
    <interceptor-ref name="defaultStack"/> 
    <interceptor-ref name="execAndWait"/> 
     <param name="delay">1000</param> 
     <result name="wait">wait.jsp</result> <!-- display custom please wait page --> 
    <result name="success">cmresulttemp.jsp</result> 
    <result name="input">attachfiles.jsp</result> 
    <result name="error">attachfiles.jsp</result> 
</action> 

如果要限制總上傳的內容大小(而不是每個文件)在你的struts.xml文件的頂部添加此

<constant name="struts.multipart.maxSize" value="10485760" /> <!-- Total 10 MB--> 
+0

該解決方案不會停止上傳。 –

相關問題