單個文件上傳
關於如何創建Struts2項目:Struts2 初體驗。
一、創建jsp頁面:
注意!要上傳文件,表單必須添加 enctype 屬性,如下: enctype="multipart/form-data"
index.jsp 代碼如下:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <!-- 注意!表單必須添加 enctype 屬性,值為"multipart/form-data" --> <form action="upload.action" method="post" enctype="multipart/form-data"> <input type="file" name="file" /> <input type="submit" value="上傳"/> </form> </body> </html>
二、創建Action類:
1. 添加三個私有字段,並添加相應的get,set方法。
private File file; ——上傳的文件,變量名對應頁面上"file"input的name屬性值。類型為java.io.File
private String fileContentType;——上傳文件的格式類型名,變量名格式為:頁面上"file"input的name屬性值+ContentType
private String fileFileName——上傳的文件名,變量名格式為:頁面上"file"input的name屬性值+fileFileName。
2. 使用struts2提供的FileUtils類拷貝進行文件的拷貝。FileUtils類位於org.apache.commons.io包下。
3. 在項目目錄下的WebContent目錄下添加 upload 文件夾,用於存放客戶端上傳過來的文件,對應第15行代碼。
Upload.java代碼如下:
1 import java.io.File; 2 import java.io.IOException; 3 import org.apache.commons.io.FileUtils; 4 import org.apache.struts2.ServletActionContext; 5 import com.opensymphony.xwork2.ActionSupport; 6 7 public class Upload extends ActionSupport{ 8 private File file; 9 private String fileContentType; 10 private String fileFileName; 11 12 @Override 13 public String execute() throws Exception { 14 //得到上傳文件在服務器的路徑加文件名 15 String target=ServletActionContext.getServletContext().getRealPath("/upload/"+fileFileName); 16 //獲得上傳的文件 17 File targetFile=new File(target); 18 //通過struts2提供的FileUtils類拷貝 19 try { 20 FileUtils.copyFile(file, targetFile); 21 } catch (IOException e) { 22 e.printStackTrace(); 23 } 24 return SUCCESS; 25 } 26 27 //省略get,set方法........... 28 29 }
三、在struts.xml中添加相應的配置代碼。
struts.xml代碼如下:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <package name="default" namespace="/" extends="struts-default"> <action name="upload" class="Upload"> <result>index.jsp</result> </action> </package> </struts>
四、測試。
啟動服務器,進入index頁面。
選擇一改圖片,點擊上傳提交表單。
打開upload文件夾(注意,這里指的是web服務器下的目錄,如我用的web服務器是tomcat安裝在電腦D盤,項目名稱為“Struts2Upload”那么其路徑為:D:\apache-tomcat-7.0.40\webapps\Struts2Upload\upload)可以看到剛才選中的圖片已經上傳到該目錄下了。
上傳多個文件
一、修改頁面文件
增加繼續添加按鈕和 addfile() 方法,讓頁面可以通過javascript增加 input 標簽。
修改后的 index.jsp代碼如下:
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 4 <html> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 7 <script type="text/javascript"> 8 //添加javascript方法 addfile() 在頁面中境加input標簽、 9 function addfile(){ 10 var file = document.createElement("input"); 11 file.type="file"; 12 file.name="file"; 13 document.getElementById("fileList").appendChild(file); 14 document.getElementById("fileList").appendChild(document.createElement("br")); 15 } 16 </script> 17 <title>Insert title here</title> 18 </head> 19 <body> 20 <!-- 注意!表單必須添加 enctype 屬性,值為"multipart/form-data" --> 21 <form action="upload.action" method="post" enctype="multipart/form-data"> 22 <div id="fileList"> 23 <input type="file" name="file" /><br/> 24 </div> 25 <!-- 添加繼續添加按鈕,點擊按鈕調用addfile() --> 26 <input type="button" value="繼續添加" onclick="addfile()" /> 27 <input type="submit" value="上傳"/> 28 </form> 29 </body> 30 </html>
二、修改Action類
1. 把三個私有字段(file,fileContentType,fileFileName)的類型更改為數組或集合類型。並添加相應的get,set方法。
2. 通過循環來上傳多個文件。
修改后的Upload.java代碼如下:
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 Upload extends ActionSupport{ //把這三個字段類型更改為數組或集合 private File[] file; private String[] fileContentType; private String[] fileFileName; @Override public String execute() throws Exception { //通過循環來上傳多個文件 for(int i=0;i<file.length;i++){ //得到上傳文件在服務器的路徑加文件名 String target=ServletActionContext.getServletContext().getRealPath("/upload/"+fileFileName[i]); //獲得上傳的文件 File targetFile=new File(target); //通過struts2提供的FileUtils類拷貝 try { FileUtils.copyFile(file[i], targetFile); } catch (IOException e) { e.printStackTrace(); } } return SUCCESS; } //省略set,get方法................... }
三、測試
1. 啟動服務器,打開index.jsp頁面。點擊繼續添加,添加兩個input。同時上傳三張圖片。
2. 點擊上傳提交表單。打開upload文件夾,可以看到剛才選中的三張圖片已經上傳到該目錄下了。