1. 程式人生 > >實驗三 Struts2 檔案上傳下載

實驗三 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()+"