2011-01-27 105 views
4

我想在JSP/Struts2中實現文件上傳,並且我注意到了一個奇怪的行爲。 我宣佈我的行動struts.xml中那種方式的文件大小限制爲1MB限制Struts2文件上傳的最大尺寸沒有上傳整個文件

<action name="massInsert" class="massInsertAction"> 
    <interceptor-ref name="fileUpload"> 
     <param name="allowedTypes"> 
      image/png,image/gif,image/jpeg 
     </param> 
     <param name="maximumSize">1000000</param> 
    </interceptor-ref> 
    <interceptor-ref name="defaultStack"/> 

    <result name="success">/WEB-INF/jsp/massInsert/massInsert.jsp</result> 
    <result name="validationError">/WEB-INF/jsp/massInsert/massInsert.jsp</result> 
</action> 

它工作得很好,超過1MB非圖像文件和圖像拋出一個錯誤。 唯一的問題是太大的文件在被刪除之前無論如何都已完全上傳到服務器的臨時文件夾中。

一旦達到限制,是否有辦法阻止上傳?

編輯: 四元數的解決方案有效,當請求越過下面的行拋出一個錯誤,一切都停止設置最大。沒有文件被寫入磁盤

<constant name="struts.multipart.maxSize" value="1000000" /> 

回答

4

有兩個文件大小參數一個與各個文件大小做其他與最大多部分文件的大小。這是有原因的,因爲如果你願意,你可以接收一組文件(只需將文件設置類型從文件更改爲文件[],這麼簡單),例如struts.multipart.maxSize設置爲10MB並且文件大小(maximumSize)設置爲1 MB,則應該能夠接收10個1MB文件。所以緩衝區應該允許增長到10 MB。

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE struts PUBLIC 
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" 
    "http://struts.apache.org/dtds/struts-2.0.dtd"> 
<struts> 
    <constant name="struts.multipart.maxSize" value="1000000" /> 

    <action name="doUpload" class="com.example.UploadAction"> 
    <interceptor-ref name="basicStack"/> 
    <interceptor-ref name="fileUpload"> 
     <param name="maximumSize">500000</param> 
    </interceptor-ref> 
    <interceptor-ref name="validation"/> 
    <interceptor-ref name="workflow"/> 

    <result name="success">good_result.jsp</result> 
    </action> 
</struts> 

來源:https://cwiki.apache.org/confluence/display/WW/File+Upload#FileUpload-FileSizeLimits