代码先锋网 代码片段及技术文章聚合

struts2框架实现文件下载

1. 创建action

import java.io.InputStream;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class FileDownloadAction extends ActionSupport {


	private String inputPath;

	public void setInputPath(String value) {
		inputPath = value;
	}

	//下载用的Action应该返回一个InputStream实例, 该方法对应在result里的inputName属性值为targetFile
	public InputStream getTargetFile() throws Exception {
		return ServletActionContext.getServletContext().getResourceAsStream(inputPath);
	}

	public String execute() throws Exception {
		return SUCCESS;
	}

}

2. 配置struts.xml

<package name="ud" namespace="/ud" extends="default">
		<action name="download" class="top.onelala.up2down_load.FileDownloadAction">
			<param name="inputPath">\images\中.gif</param>
			<result name="success" type="stream">
				<param name="contentType">image/gif</param>
				<param name="inputName">targetFile</param>
				<param name="contentDisposition">attachment;filename="struts.gif"</param>
				<param name="bufferSize">4096</param>
			</result>
		</action>
 </package>

3. 前台页面显示,download.jsp

<li>下载Struts2的Logo:<a href="ud/download.action">下载图形文件</a></li>

**注意:**attachment;filename=“struts.gif”,设置浏览器以下载的方式打开文件,文件下载的时候保存的名字应为struts.gif,如果直接写filename=“struts.gif”,那么默认情况是代表inline,浏览器会尝试自动打开它,此等价于这样的写法: inline; filename="struts2.txt"

测试

附录:

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

创建action

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

配置struts.xml

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

前台页面显示,filelist.jsp

<body>
    <c:forEach items="${files }" var="f">
    	${f.name}<a href="listdownload.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("/upload");
		File f=new File(path);
		//获取目录下保存的文件
		files=f.listFiles();
		return "list";
	}
	public InputStream  getDownloadFile() throws Exception{
		String filePath = ServletActionContext.getRequest()
				.getServletContext().getRealPath("/upload/"+fileName);
		InputStream is = new FileInputStream(new File(filePath));
		//解决下载文件名称问题
		fileName=URLEncoder.encode(fileName, "UTF-8");
		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">/filelist.jsp</result>
				<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>

版权声明:本文为weixin_30341745原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_30341745/article/details/97339734

智能推荐

struts2框架(三)文件上传与下载

通过struts-default.xml里面的fileUpload拦截器实现文件上传与下载。 <interceptor name="fileUpload" class="org.apache.struts2.interceptor.FileUploadInterceptor"/> 1.FileUploadInterceptor里面的相关方法 2....

struts2文件下载(实现模板下载)

项目中的一个应用,提供模板下载。 jsp页面: 对应的js部分,负责触发事件: action 中代码部分: 之前自己是用下面这种方法去解决中文乱码问题的,但是发现在tomcat下是不会乱码,而在WebLogic下还是会乱码,所以还是上面那种URL编码可靠一点。 xml配置文件部分: 在xml的配置文件中, 中的“downloadFile”必须对应action中的方法名&ld...

Struts2 文件下载

文件下载在项目中经常会使用。 最简单的文件下载,只要提供一个链接地址就能够进行下载,比如在eclipse官方网站下载eclipse时就是 通过这样的方式进行下载。  第二种方式可以通过HttpServletResponse进行下载,通过文件读写的方式把要下载的文件写到 HttpServletResponse的输出流中,完成文件下载。 servlet代码     &nb...

struts2 文件下载

在struts2中,通过结果类型stream来支持文件下载功能.当指定stream结果类型时,需要设置一个inputName作为输入流,这个输入流是被下载文件的入口. (1)编写实现文件下载的类DownloadAction  在上述Action中,getTargetFile()方法返回一个InputStream输入流,次输入流返回的是下载目标文件的入口.该方法名是getTargetFil...

Struts2 文件下载

本文同步于个人Github博客:https://github.com/johnnian/Blog/issues/1,欢迎留言。 Struts2文件下载的相关配置如下: Struts.xml 配置 相关说明: 1、 contentType: 下载文件的类型,客户端向Tomcat请求静态资源的时候,Tomcat会自动在 Response Head 里面添加 “Content-Type&rd...

猜你喜欢

struts2 文件下载

1.首先传入要下载的文件名 2.在action中得到文件名并进行转码 在这里发现不用转码,一转码反而错误,个人觉得先前在某个地方应该已经转码过了,在此转码反而发生错误; 3.下载提交的业务方法(在struts.xml中进行配置) public String down(){ return “download”; } struts.xml中 4.返回文件流的方法 5.下载显示的...

Struts2 文件下载 实现代码

      刚开始以为下载代码很好写,就是给文件的具体路径,就可直接下载了,可后来发现,只有路径的话,很多浏览器会把要下载的文件给打开,在页面输出为乱码,所以记录一下这个的经验,以备不时之需:   1.确保当前项目下有 struts2-caore.jar,xwork.jar,commons-io.jar 2.在struts.xml 中加入...

struts2实现文件上传和下载

一、文件上传          1、客户端表单                    2 、struts.xml配置  ...

Struts2之实现文件上传与下载

在电脑前坐了一天,看看这个看看那个,也没什么意思,就翻一翻以前培训时的课件,整理整理全当做复习了。 当我们用struts2进行文件上传时,首先要将from表单的enctype属性进行重新设置。那么该属性的取值就是决定表单数据的编码方式。一般有三个属性取值: application/x-www-form-urlencoded:默认的编码方式,它只处理表单域里的value属性,采用这种编码方式的表单会...

struts2实现文件的上传和下载实例

原文地址为:struts2实现文件的上传和下载实例 实现原理 Struts 2是通过Commons FileUpload文件上传。 Commons FileUpload通过将HTTP的数据保存到临时文件夹,然后Struts使用fileUpload拦截器将文件绑定到Action的实例中。从而我们就能够以本地文件方式的操作浏览器上传的文件 具体实现: 一、创建index.jsp页面      创建re...