1. 程式人生 > >Struts2 檔案的下載

Struts2 檔案的下載

Struts2使用type="stream"的result就可以了

contentType:結果型別

contentLength:下載的檔案的長度

contentDisposition:設定的響應頭,檔案的下載型別

inputName:指定檔案輸入流的getter定義的屬性的名字,預設inputstream

前4個是可以動態獲取的,後面是靜態的

bufferSize:快取的大小1024

allowCaching:是否允許的使用快取

contentCharSet:指定下載的字符集

以上採納數可以在Action中以getter方法的方式獲取


Demo如下

jsp頁面

 <a href="upload.do">點選下載原始檔</a>

 Struts2.xml檔案配置如下

<action name="upload" class="cn.com.app.Upload" method="execute">
			<result type="stream" name="success">
			 <param name="bufferSize">2048</param>
              </result>
			<result name="input">/index.jsp</result>
		</action>

Action類如下

package cn.com.app;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import javax.servlet.ServletContext;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class Upload extends ActionSupport {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private String contentType;
	private long contentLength;
	private String contentDisposition;
	private InputStream InputStream;

	public String getContentType() {
		return contentType;
	}

	public long getContentLength() {
		return contentLength;
	}

	public String getContentDisposition() {
		return contentDisposition;
	}

	public InputStream getInputStream() {
		return InputStream;
	}

	@Override
	public String execute() {
		// TODO Auto-generated method stub
		// 確認各個成員物件的值
		contentType = "text/html";
		contentDisposition = "attachment;filename=a.html";
		// 獲取檔案的路徑
		ServletContext sv = ServletActionContext.getServletContext();
		String fileName = sv.getRealPath("/files/a.html");

		// 讀取檔案
		try {
			InputStream = new FileInputStream(fileName);
			System.out.println("路徑:" + InputStream);
			// 檔案的長度
			contentLength = InputStream.available();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		return SUCCESS;
	}
}

前提是WebRoot下面有檔案,檔案是存在的

成功效果如下