27.struts2_文件的下载


Struts2专门为文件下载提供了一种Stream结果类型,在使用Stream结果时,不必准备一个JSP页面。

可为result 设定如下参数:

contentType: 结果类型

contentLength:下载长度

contentDisposition:设定相应头,是一个文件下载类型。一般取值格式为: attachment;filename=“document.pdf”.

inputName: 指定文件输入流的 getter定义的属性的名字,默认为 inputStream

bufferSize:缓存的大小 默认为1024

allowCaching:是否允许使用缓存

contentCharSet:指定下载的字符集

以上参数也可以在Aciton中以getter方法的方式提供。


public class testDownloadAction  extends ActionSupport{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	private String contentType;
	
	private long contentLength;
	
	private String contentDisposition;
	
	private InputStream inputStream;//提供一个输入流
	
	public InputStream getInputStream() {
		return inputStream;
	}
	
	public String getContentType() {
		return contentType;
	}
	
	public long getContentLength() {
		return contentLength;
	}

	public void setContentLength(long contentLength) {
		this.contentLength = contentLength;
	}

	public String getContentDisposition() {
		return contentDisposition;
	}

	public void setContentDisposition(String contentDisposition) {
		this.contentDisposition = contentDisposition;
	}

	public void setContentType(String contentType) {
		this.contentType = contentType;
	}

	@Override
	public String execute() throws Exception {
		
		//确定各个成员变量的值
		
		contentType="text/html";
		contentDisposition=new String("attachment;filename='綿谷の.html'".getBytes(), "ISO8859-1"); //有中文需要转码,不然下载不识别
		
		System.out.println("------"+contentDisposition);
		
		ServletContext sac=ServletActionContext.getServletContext();
		
		
		String fileName=sac.getRealPath("/files/知乎.html");
		
		inputStream=new FileInputStream(fileName);
		contentLength=inputStream.available();
		
		
		return super.execute();
	}
}

struts.xml部分内容

<action name="testDownload" class="com.hcx.app.testDownloadAction">
			<result name="success" type="stream" >
				<param name="bufferSize" >2048</param>
			</result>
		</action>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值