struts2实现文件下载

要下载文件,首先要获取文件列表

创建action

public class DownloadAction extends ActionSupport{
	private File[] files;
	public String list(){
		//取得文件保存路径
		String path=ServletActionContext.getServletContext().getRealPath("/download");
		File f=new File(path);
		//获取目录下保存的文件
		files=f.listFiles();
		return "list";
	}
//省略get/set
}
配置struts.xml

<action name="*down" class="base.DownloadAction " method="{1}">
	<result name="list">/filelist.jsp</result>
</action>

浏览器输入listdown.action请求跳转到文件下载列表页面

前台页面显示,filelist.jsp

<body>
    <c:forEach items="${files }" var="f">
    	${f.name}<a href="download.action?fileName=${f.name }">下载</a><br>
    </c:forEach>
</body>
点击下载链接,将文件名传入后台,

修改action代码

public class DownloadAction extends ActionSupport{
	private File[] files;
	private String fileName;
	public String list(){
		//取得文件保存路径
		String path=ServletActionContext.getServletContext().getRealPath("/download");
		File f=new File(path);
		//获取目录下保存的文件
		files=f.listFiles();
		return "list";
	}
	public InputStream  getDownloadFile() throws Exception{
		String filePath = ServletActionContext.getRequest()
				.getServletContext().getRealPath("/download/"+fileName);
		InputStream is = new FileInputStream(new File(filePath));
		return is;
	}
	public void setFileName(String fileName) throws UnsupportedEncodingException {
		//处理get请求中文乱码
		this.fileName = new String(fileName.getBytes("iso8859-1"),"utf-8");
	}
	public File[] getFiles() {
		return files;
	}
	public void setFiles(File[] files) {
		this.files = files;
	}
	public String getFileName() {
		return fileName;
	}	
}

修改struts.xml文件

<action name="*down" class="base.DownloadAction" method="{1}">  
	<result name="list">/index.jsp</result>  
</action> 
<action name="download" class="base.DownloadAction" >
	<result type="stream">  
		<!-- 下载的文件数据存放的方法,该方法返回一个InputStream   
		例如取值为inputStream的属性需要编写getInputStream()方法-->  
		<param name="inputName">downloadFile</param>  
		<!--下载时,客户端显示的下载的文件名 -->  
		<param name="contentDisposition"> attachment; filename=${fileName}</param>  
		<!-- 数据的缓冲大小 -->  
		<param name="bufferSize">1024</param>  
	</result>  
</action>
其中attachment;filename=${fileName},设置浏览器以下载的方式打开文件,文件下载的时候保存的名字应为${fileName},如果直接写filename=${fileName},那么默认情况是代表inline,浏览器会尝试自动打开它,

等价于这样的写法:inline; filename=${fileName}




评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值