struts2文件下载

来源:互联网 发布:mysql loadfile 锁 编辑:程序博客网 时间:2024/06/16 05:35

        上一次写了用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。

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




0 0
原创粉丝点击