實驗三 Struts2 檔案上傳下載
Struts2 檔案上傳下載
一、實驗目的
理解MVC設計模式的基本概念和Java Web開發的兩種模式Model1和Model2,以及Struts開發工作流程和基本應用。
二、實驗要求
三、實驗步驟
Struts2上傳要用到commons-fileupload 包和commons-io包,注意匯入。
介紹如下:1. 單個檔案上傳;2. 多個檔案上傳; 3. 上傳檔案大小和型別限制 4.修改預設提示資訊 5.檔案下載
(一)單個檔案上傳
UploadAction.java
package cn.edu.struts;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
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;// 得到檔案的名稱
// 這裡略省了屬性的getter/setter方法 public String saveFile() throws Exception { String realpath = ServletActionContext.getServletContext().getRealPath( "/images"); File file = new File(realpath); /*if (!file.exists()) file.mkdirs(); FileUtils.copyFile(uploadImage, new File(file, uploadImageFileName)); return "success";*/ InputStream is = new FileInputStream(uploadImage);//檔案輸入流 File toFile = new File(file, this.getUploadImageFileName());// 設定目標檔案 OutputStream os = new FileOutputStream(toFile);// 建立一個輸出流 byte[] buffer = new byte[1024];//設定快取 int length = 0; while ((length = is.read(buffer)) > 0) {//讀取myFile檔案輸出到toFile檔案中 os.write(buffer, 0, length); } is.close();//關閉輸入流 os.close();//關閉輸出流 return "success"; } /** * @return the uploadImage */ public File getUploadImage() { return uploadImage; } /** * @param uploadImage the uploadImage to set */ public void setUploadImage(File uploadImage) { this.uploadImage = uploadImage; } /** * @return the uploadImageContentType */ public String getUploadImageContentType() { return uploadImageContentType; } /** * @param uploadImageContentType the uploadImageContentType to set */ public void setUploadImageContentType(String uploadImageContentType) { this.uploadImageContentType = uploadImageContentType; } /** * @return the uploadImageFileName */ public String getUploadImageFileName() { return uploadImageFileName; } /** * @param uploadImageFileName the uploadImageFileName to set */ public void setUploadImageFileName(String uploadImageFileName) { this.uploadImageFileName = uploadImageFileName; }
}
Struts.xml
<?xml version="1.0" encoding="UTF-8" ?> /upload/success.jsp <!-- 定義上傳出錯要轉向的頁面 -->
<result name="input">/upload/error.jsp</result>
<interceptor-ref name="fileUpload"><!-- 配置fileUpload攔截器 -->
<param name="maximumSize">11048576</param><!-- 配置允許上傳檔案大小最大值 -->
<param name="allowedTypes">text/plain,application/msword,image/jpeg,image/jpg,image/x-png,image/pjpeg,application/octet-stream
</param><!-- 配置允許上傳檔案型別 -->
<param name="allowedExtensions">.doc,.jpg,.txt</param><!-- 配置允許上傳檔案型別 -->
</interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</action>
Input.jsp
<%@ page language=“java” import=“java.util.*” pageEncoding=“UTF-8”%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"