<interceptor-ref name="fileUpload">
<param name="allowedTypes">image/bmp,image/png,image/gif,image/jpeg,image/pjpeg</param>
<!-- 圖片不能大於5M -->
<param name="maximumSize">5242880</param> </interceptor-ref>
<package name="upload2" extends="struts-default">
<action name="upload2" class="com.ljq.action.UploadAction2" method="execute">
<interceptor-ref name="fileUpload">
<param name="allowedTypes">image/bmp,image/png,image/gif,image/jpeg</param>
<param name="allowedExtensions">png,jpg,xml,txt</param>
<!-- 文件大小, 以字節為單位 -->
<param name="maximumSize">10259560</param></pre>
</interceptor-ref> <!-- 默認攔截器必須放在fileUpload之后,否則無效 -->
<interceptor-ref name="defaultStack" />
<result name="success">/WEB-INF/page/message.jsp</result>
<result name="input">/upload/upload.jsp</result>
</action>
</package>
文件上傳的攔截器中的三個參數
maximumSize------>限制上傳文件的最大size,默認的是2M 注意:這里的2M指的是struts.multipart.maxSize的值,而並非是maximumSize
allowedTypes ------>對上傳的文件過濾,即設置文件的類型
allowedExtensions-->也是對文件的過濾,設置文件的后綴名
問題:
1,當設置文件的不能大於5M,但是上傳2M以上的圖片直接出錯跳轉input;
解決辦法:
<!-- 整個項目所上傳文件的最大的Size --> <constant name="struts.multipart.maxSize" value="9000000"/>;
a.struts.multipart.maxSize掌控整個項目所上傳文件的最大的Size。超過了這個size,后台報錯,程序處理不了如此大的文件。fielderror里面會有如下的提示: the request was rejected because its size (16272982) exceeds the configured maximum (9000000)
b.fileUpload攔截器的maximumSize屬性必須小於struts.multipart.maxSize的值。 struts.multipart.maxSize默認2M,當maximumSize大於2M時,必須設置struts.multipart.maxSize的值大於maximumSize。<!—這一條最重要,很容易忽略—>
注意:在使用constant設置文件上傳的大小時,value不能使用如10M寫成1024*1024*10,這樣是不允許的,但在攔截器中可以這樣寫
c.當上傳的文件大於struts.multipart.maxSize時,系統報錯 當上傳的文件在struts.multipart.maxSize和maximumSize之間時,系統提示上傳成功!
問題:
2,在對文件進行過濾時,出現設置文件的類型后,設置了文件的后綴名,后者設置無效
解決辦法:
使用”文件類型“和”文件后綴名“兩者中的一個來控制上傳文件的類型/后綴名。但是,allowedTypes的優先級別高於allowedExtensions,
如果配置了allowedTypes則allowedExtensions將不再起效
利用allowedExtensions參數來控制上傳文件的后綴名,則不能配置allowedTypes參數。
否則,如果allowedTypes參數有配置,那么allowedExtensions參數將不會再起效。