struts2文件下载

        上一次写了用struts2进行文件上传,这次我来给大家分享一下用struts2下载文件。

很多人可能都知道,struts2中的结果类型中有stream类型,这就是用于支持文件下载的。其实,在页面上直接给出一个超链接,href属性设为要下载的文件路径就可以完成简单的下载功能,但是这么做的话如果文件名是中文的话在默写浏览器上会下载失败。因此,我们需要在action中返回一个InputStream流作为文件下载入口。这里我为大家写了个小例子:

package action;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class DownloadAction extends ActionSupport {
	private String inputPath;//文件路径
	//获取文件在服务器上的保存位置
	public String getInputPath() {
		return ServletActionContext.getServletContext().getRealPath(inputPath);
	}
	//可从struts.xml中动态配置
	public void setInputPath(String inputPath) {
		this.inputPath = inputPath;
	}
	//返回一个InputStream作为文件下载入口
	public InputStream getTargetFile() throws Exception{
		File file = new File(getInputPath());
		InputStream in = new FileInputStream(file);
		return in;
	}
	public String execute() throws Exception{
		return SUCCESS;
	}
}

然后是struts.xml文件:

 

  	<action name="DownloadAction" class="action.DownloadAction">
		<param name="inputPath">/uploadFiles/struts2文件下载.txt</param>
		<result type="stream">
			<param name="inputName">targetFile</param>
			<param name="contentDisposition">attachment;fileName="download.txt"</param>
		</result>
	</action>

其中有几个参数需要解释一下:

inputName指被下载文件的入口输入流。

contentDisposition中的fileName可以指定下载文件的文件名,另外还有一点要说明,服务端向客户端游览器发送文件时,如果是浏览器支持的文件类型,一般会默认使用浏览器打开,比如txt、jpg等,会直接在浏览器中显示,但是如果加上attachment,浏览器就会提示用户保存。

最后看一下前台页面download.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>   
<%@taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html>
  <head>
  </head>
  <body>
<a href="DownloadAction.action" >点击下载</a>
  </body>
</html>

在页面 中加一个超链接访问这个action。

这次一个简单的文件下载小例子就算是完成了。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值