Struts 2ファイルダウンロード機能(テスト済み)

2785 ワード

くだらないことは言わないで、直接ソースコードに登って、すべて注釈の中で尽くします:
package study.action;

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;

import javax.servlet.ServletContext;

import org.apache.struts2.util.ServletContextAware;

import com.opensymphony.xwork2.ActionSupport;

/**
 * Struts2 
 * 
 * @author Echo
 * 
 */
public class DownloadAction extends ActionSupport implements
		ServletContextAware {
	/**   */
	private static final long serialVersionUID = 1L;
	/**  ,  */
	private ServletContext context;
	/**  ,  */
	private String filename = "wusuowei";
	/**  MIME  */
	private String mimeType;
	/**   */
	private InputStream inStream;

	@Override
	public String execute() throws Exception {
		mimeType = context.getMimeType(filename);
		return SUCCESS;
	}

	public InputStream getInStream() {
		//  
		inStream = context.getResourceAsStream("/doc/" + filename);
		if (inStream == null) { //  
			inStream = new ByteArrayInputStream("Sorry,File not found !"
					.getBytes());
		}
		return inStream;
	}

	public String getMimeType() {
		return mimeType;
	}

	public void setFilename(String filename) {
		try {
			//  
			this.filename = new String(filename.getBytes("ISO8859-1"), "GBK");
		} catch (UnsupportedEncodingException e) {
		}
	}

	public String getFilename() {
		try {
			//  
			return new String(filename.getBytes(), "ISO8859-1");
		} catch (UnsupportedEncodingException e) {
			return this.filename;
		}
	}

	public void setServletContext(ServletContext context) {
		this.context = context;
	}

}

struts.xmlプロファイル:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
	<package name="zyc" extends="struts-default" namespace="/">
		<action name="download" class="study.action.DownloadAction">
			<!--  Action success  -->
			<result type="stream" name="success">
				<!--  , Action mineType  -->
				<param name="contentType">${mimeType}</param>
				<!--  , Actiono InputStream    -->
				<param name="inputName">inStream</param>
				<!--  , Action  -->
				<param name="contentDisposition">attachment;filename="${filename}"</param>
				<!--   -->
				<param name="bufferSize">1024</param>
			</result>
		</action>
	</package>
</struts>    
残りの内容は、このActionをJSPページにネストしてクリックすると、対応するコンテンツをダウンロードすることができます.