Struts2的檔案上傳
阿新 • • 發佈:2018-12-22
在Struts2框架中,專門提供了實現檔案上傳和下載功能的包:commons-fileupload-版本號.jsp和commons-io-版本號.jsp,在開發Web程式時,需要將兩Jar包:匯入到Web工程中。
使用Struts2上傳檔案時,只需要使用普通的Action,但是為了獲取一些上傳檔案的資訊,如上傳檔名,檔案型別,需要按照一定的規則在Aciton中增加一些getter和setter方法。可以按一下步驟實現檔案上傳:
(1)編寫上傳頁面,並設定form表單的編碼型別。
(2)編寫上傳檔案的Action,在該action中必須定義3個變數,即檔案,檔名,檔案型別。
(3)修改配置檔案struts.xml,對Action進行配置
(4)檔案上傳過濾。
(5)編寫上傳成功頁面。
1.編寫上傳頁面,並設定form表單的編碼型別
在檔案上傳的表單中,所使用的編碼型別 enctype="multipart/form-data",並且資料提交方式要用post方式。假設該頁面是inputFile.jsp。
<s:form action="fileupload" method="post" enctype="multipart/form-data"> <s:file name="file" lable="選擇要上傳的檔案"/> <s:submit value="上傳"/> </s:form>
2.編寫上傳檔案的Action,在該action中必須定義三個變數:檔案、檔名、檔案型別
private File file;
private String fileFileName;
private String fileContentType;
注意:這3個變數的命名,必須按如下規則:
(1)File型別的變數名必須與表單中檔案的name要相同。
(2)fileFileName,命名格式是name+"FileName"。
(3)fileContentType,命名規則是name+"ContentType"。
編寫Action:FileUpLoadAction,其關鍵程式碼如下:
package Action;
import com.opensymphony.xwork2.ActionSupport;
import java.io.File;
import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext;
public class FileUploadAction extends ActionSupport {
private File file;
private String fileFileName;
private String fileContentType;
public File getFile() {
return file;
}
public void setFile(File file) {
this.file = file;
}
public String getFileFileName() {
return fileFileName;
}
public void setFileFileName(String fileFileName) {
this.fileFileName = fileFileName;
}
public String getFileContentType() {
return fileContentType;
}
public void setFileContentType(String fileContentType) {
this.fileContentType = fileContentType;
}
@Override
public String execute() throws Exception {
String realPath=ServletActionContext.getServletContext().getRealPath("/file"); //取得你當前執行檔案在伺服器上的絕對路徑
if(file!=null) {
//建立上傳檔案要存放的檔案及其存放位置(絕對路徑)
File saveFile=new File(new File(realPath),fileFileName); //上傳檔案存放路徑
if(!saveFile.getParentFile().exists()) { //獲得檔案目錄,判斷是否存在
saveFile.getParentFile().mkdirs(); //如果資料夾不存在,建立資料夾
}
//利用commons.io包中的工具類,實現檔案複製,把file拷貝發saveFile
FileUtils.copyFile(file, saveFile);
return "ok";
}
else
return "back";
}
}
3.修改配置檔案struts2.xml
<action name="fileupload" class="Action.FileUploadAction">
<result name="ok">/UpLoadSuccess.jsp</result>
<result name="back">/inputFile.jsp</result>
</action>
UpLoadSuccess.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
恭喜您,上傳成功!!!
</body>
</html>