當請求表單中包含一個文件file,FileUploadInterception攔截器會自動應用於這個文件。
表單:
<s:form namespace="/xxx" action="yyy" method="post" enctype="multipart/form-data">
<s:file name="file" label="YourFile"></s:file>
<s:submit></s:submit>
</s:form>
我們可以在action中添加三個屬性來接收文件、文件的類型和文件名,Demo如下:
* package com.example;
*
* import java.io.File;
* import com.opensymphony.xwork2.ActionSupport;
*
* public UploadAction extends ActionSupport {
* private File file;
* private String contentType;
* private String filename;
*
* public void setUpload(File file) {
* this.file = file;
* }
*
* public void setUploadContentType(String contentType) {
* this.contentType = contentType;
* }
*
* public void setUploadFileName(String filename) {
* this.filename = filename;
* }
*
* public String execute() {
* //...
* return SUCCESS;
* }
* }
當然,可以設置參數來限制上傳文件的大小、文件的類型,也可以通過文件的后綴名來限制上傳文件的類型。
- maximumSize:表示上傳文件大小的上限,單位是byte。默認2MB。
- allowedTypes:表示允許上傳文件的類型,每個類型之間用逗號分隔開(ie: text/html, image/jpg)。如果沒有指定這個參數,則可以接受任何類型的文件。
- allowedExtensions:表示允許上傳以這些后綴結尾的文件,每個后綴之間用逗號分隔開(ie: .html, .jpg)。如果沒有指定這個參數,則可以接受任何類型的文件。
ie:
<interceptor-ref name="defaultStack">
<!-- 指定上傳文件的大小 -->
<param name="fileUpload.maximumSize">6000</param>
<!-- 以后綴名指定上傳文件的類型 -->
<param name="fileUpload.allowedExtensions">.text,.jpg,.png</param>
<!-- 以文件類型指定上傳文件的類型 -->
<param name="fileUpload.allowedTypes">image/png</param>
</interceptor-ref>
如果上傳的文件不符合指定的要求,會回顯錯誤信息。這些錯誤信息基於i18n,存放在struts-messages.properties配置文件中。我們也可以通過關鍵字來重寫這些錯誤信息:
* <li>struts.messages.error.uploading - a general error that occurs when the file could not be uploaded</li>
* <p/>
* <li>struts.messages.error.file.too.large - occurs when the uploaded file is too large</li>
* <p/>
* <li>struts.messages.error.content.type.not.allowed - occurs when the uploaded file does not match the expected
* content types specified</li>
* <p/>
* <li>struts.messages.error.file.extension.not.allowed - occurs when the uploaded file does not match the expected
* file extensions specified</li>
