1. 程式人生 > >Struts2的檔案上傳

Struts2的檔案上傳

在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>