•Commons-FileUpload組件
–Commons是Apache開放源代碼組織的一個Java子項目,其中的FileUpload是用來處理HTTP文件上傳的子項目
•Commons-FileUpload組件特色
–使用簡單:能夠方便地嵌入到JSP文件中,編寫少許代碼便可完成文件的上傳功能
–可以全程控制上傳內容
–可以對上傳文件的大小、類型進行控制
•須要下載Common-FileUplaod框架地址(固然MyEclipce中Struts2支持裏自帶有這兩個包):
–下載commons-fileupload-1.2-bin.zip文件
–解壓後獲得commons-fileupload-1.2.jar
–下載commons-io-1.3.2-bin.zip文件
–解壓後獲得commons-io-1.3.2.jar
基於表單的文件上傳
•注意:上面是基於表單的上傳,在form標籤中有一個必須的屬性值設置:enctype.
•若是要作文件上傳功能必須將enctype值設爲multipart/form-data.
•此外,文件上傳還須要二個JAR文件支持:
文件上傳頁面upload.jsp(二選一表單便可)
<%@ taglib uri="/struts-tags" prefix="s"%> <body> <form action="uploads" method="post" enctype="multipart/form-data"> 文件: <input type="file" name="uploadImage"> <input type="submit" value="提交"> </form> 或者(兩個表單二選一便可) <s:form action="uploads" method="post" enctype="multipart/form-data"> <s:file name=「uploadImage " label="選擇上傳的文件" /> <s:submit value="上傳" /> </s:form> </body>
Struts2.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"> <struts> <!-- 要注意Struts2默認文件上傳最大爲2M即使你設置了<param name="maximumSize">5242880</param> 當上傳的文件大於2M時候也會出錯的這時要設置,另一個常量 <constant name="struts.multipart.maxSize" value="1000000000"/> --> <package name="Struts2" extends="struts-default" namespace="/"> <action name="uploads" class="com.struts.UploadAction"> <!-- 指定(限制)上傳文件的類型,定義局部攔截器,修改默認攔截器的屬性 "fileUpload.maximumSize" :限制上傳最大的文件大小。 "fileUpload.allowedTypes":容許上傳文件的類型。 "fileUpload.allowedExtensions":容許上傳文件的可擴展文件類型。 --> <interceptor-ref name="defaultStack"> <param name="fileUpload.maximumSize">500000000</param> <param name="fileUpload.allowedTypes">text/plain,application/vnd.ms-powerpoint</param> <param name="fileUpload.allowedExtensions">.txt,.ppt</param> </interceptor-ref> <result>/success.jsp</result> <!-- 出現錯誤自動會返回input結果,進入結果視圖 --> <result name="input" >/error.jsp</result> </action> </package> </struts>
附加:contentType類型設置apache
上傳Action類UploadAction-簡單的保存文件方式
package com.struts; import java.io.File; import java.io.IOException; import org.apache.commons.io.FileUtils; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; public class UploadAction extends ActionSupport { private File uploadImage; //獲得上傳的文件 private String uploadImageContentType; //獲得文件的類型 private String uploadImageFileName; //獲得文件的名稱 public String execute(){ System.out.println("fileName:"+this.getUploadImageFileName()); System.out.println("contentType:"+this.getUploadImageContentType()); System.out.println("File:"+this.getUploadImage()); //獲取要保存文件夾的物理路徑(絕對路徑) String realPath=ServletActionContext.getServletContext().getRealPath("/upload"); File file = new File(realPath); //測試此抽象路徑名錶示的文件或目錄是否存在。若不存在,建立此抽象路徑名指定的目錄,包括全部必需但不存在的父目錄。 if(!file.exists())file.mkdirs(); try { //保存文件 FileUtils.copyFile(uploadImage, new File(file,uploadImageFileName)); } catch (IOException e) { e.printStackTrace(); } return SUCCESS; } public File getUploadImage() { return uploadImage; } public void setUploadImage(File uploadImage) { this.uploadImage = uploadImage; } public String getUploadImageContentType() { return uploadImageContentType; } public void setUploadImageContentType(String uploadImageContentType) { this.uploadImageContentType = uploadImageContentType; } public String getUploadImageFileName() { return uploadImageFileName; } public void setUploadImageFileName(String uploadImageFileName) { this.uploadImageFileName = uploadImageFileName; } }
上傳成功頁面:app
<body> 成功頁面. <br> </body>
上傳失敗頁面:框架
<!-- 引入struts2的標籤庫 --> <%@ taglib uri="/struts-tags" prefix="s"%> <body> 跳轉錯誤頁面。。<br> <!-- fielderror標籤輸出action的fieldErrors屬性保存的字段錯誤,fieldErrors是一個map類型的屬性。 --> <s:fielderror /> <!-- 生產一個查看debug信息的連接 --> <s:debug /> </body>