注:struts2提供的下载功能,在action中只需要提供一个返回inputStream流的方法
实现文件下载的流程
jsp视图(form表单)->struts.xml(找到对应的action)->xxxAction.java(excute())->struts.xml(找到对应的result这里是“sucess”),通过inputName属性找到对应的InputStream方法->xxxAction调用getInputStream()方法,得到返回值
1.struts.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <constant name="struts.enable.DynamicMethodInvocation" value="false" /> <constant name="struts.devMode" value="true" /> <constant name="struts.i18n.encoding" value="utf-8"/> <package name="parameter" namespace="/" extends="struts-default"> <action name="download" class="com.ru.action.downloadaction"> <param name="inputPath">\document\eeeeeeeeee.docx</param> <!-- struts2实现文件下载 --> <!-- 1.result必须配制成stream类型 --> <!-- 2.要配置4个属性 --> <result name="sucess" type="stream"> <!-- 下载的文件类型 --> <param name="contentType">application/vnd.openxmlformats-officedocument.wordprocessingml.document</param> <!-- 指定getInputStream()方法返回的输入流“inputStream” --> <param name="inputName">inputStream</param> <!-- 指定下载文件名 --> <param name="contentDisposition">"文档"</param> <!-- 指定下载文件的缓冲大小 --> <param name="bufferSize">4096</param> </result> </action> </package> </struts>
2.downloadaction.java
package com.ru.action; import java.io.InputStream; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionSupport; public class downloadaction extends ActionSupport{ //struts2提供的下载功能,在action中只需要提供一个返回inpuutStream流的方法 //通过struts.xml配置文件动态指定属性值,这个属性用来指定文件位置 private String inputPath; public String getInputPath() { return inputPath; } //传递属性值的setter方法 public void setInputPath(String inputPath) { this.inputPath = inputPath; } //提供inputStream流的方法 /*注:方法名getInputStream,那么对应的struts配置文件中的inputName就必须 *写成inputStream */ public InputStream getInputStream(){ return ServletActionContext.getServletContext(). getResourceAsStream(getInputPath()); } @Override public String execute() throws Exception { return "sucess"; } }
注: 上面的getInputStream()方法只能用于相对路径,及tomcat下的路径
第二个例子,下载显示文件名称。
(1)访问连接:
function dowanloadVirusFile(virusFileName,fileName){ window.location.href="downloadFile_virusFile.action?fileName="+fileName+"&downLoadFileName="+virusFileName; }
(2)strus.xml
<action name="*_virusFile" class="virusFileAction" method="{1}"> ... 其他result ... <!-- 文件下载 --> <result name="downloadvirus" type="stream"> <!-- 下载文件类型定义 --> <param name="contentType">application/octet-stream</param> <!-- 下载文件输出流定义 的方法名称--> <param name="inputName">downloadStream</param> <!-- 下载文件处理方式,下载是显示的文件名称 --> <param name="contentDisposition">attachment;filename="${fileName}"</param> <!-- 下载文件的缓冲大小 --> <param name="bufferSize">8192</param> </result> <result name="downloadVirusFile" type="json"> <param name="includeProperties">message</param> </result> ... ... </action>
(3)action.java
private String fileName; public String downLoadFileName; public String getDownLoadFileName() { return downLoadFileName; } public void setDownLoadFileName(String downLoadFileName) { this.downLoadFileName = downLoadFileName; } public String getFileName() { return fileName; } public void setFileName(String fileName) { this.fileName = fileName; } //action方法 public String downloadFile(){ ........一些处理代理....... return "downloadvirus"; } //当downloadFile()返回downloadvirus字符串后,struts开始调用getDownloadStream()方法下载文件 public InputStream getDownloadStream(){ String virusPath = path + "/" + downLoadFileName; FileInputStream inputStream = null; try { inputStream = new FileInputStream(new File(virusPath)); } catch (FileNotFoundException e) { e.printStackTrace(); } return new BufferedInputStream(inputStream); }
第三个例子,不实用strus的下载功能,即只需要链接
(1)连接:
<input type="button" class="derive" value="" onclick="location='licenseExport.action'">
(2)struts.xml
<action name="licenseExport" class="sysRunConfigAction" method="licenseExport"></action>
(3)action.java
public void licenseExport() throws Exception{ downloadFile(licensePath, "licenseCode.txt", ServletActionContext.getResponse()); } public static void downloadFile(String filePath,String fileName, javax.servlet.http.HttpServletResponse response) { // // 打开指定文件的流信息 FileInputStream fs = null; File file=null; try { file=new File(filePath); fs = new FileInputStream(file); } catch (FileNotFoundException e) { e.printStackTrace(); return; } // 设置响应头和保存文件名 response.setContentType("APPLICATION/OCTET-STREAM"); response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\""); // 写出流信息 int b = 0; try { PrintWriter out = response.getWriter(); while ((b = fs.read()) != -1) { out.write(b); } fs.close(); out.close(); System.out.println("文件下载完毕!"); //下载完删除文件 if(null!=file&&filePath.indexOf("pkg")!=-1){ if(file.delete()) System.out.println("文件删除完毕!"); } } catch (Exception e) { e.printStackTrace(); System.out.println("下载文件失败!"); } }
相关推荐
在这个“Struts2实现文件下载功能”的示例中,我们将深入探讨如何利用Struts2框架来实现在web应用中让用户下载文件的功能。 首先,我们需要理解文件下载的基本原理。在Web应用中,当用户点击一个链接或提交一个表单...
在Struts2中实现文件下载是一项常见的需求,例如用户请求查看或保存服务器上的文件。下面将详细解释如何在Struts2框架下实现文件下载的功能。 首先,理解基本原理:文件下载通常涉及两个主要步骤。第一步是服务器端...
在Struts2中实现文件下载的功能,可以帮助用户从服务器获取并保存文件到本地计算机,例如这里的"1.xls"文件。下面我们将深入探讨如何在Struts2框架下实现文件下载的实例。 首先,我们需要在项目的Web应用目录结构中...
本篇文章将详细探讨如何在Struts2框架下实现文件的上传与下载。 首先,我们需要了解Struts2中的文件上传机制。Struts2提供了`FileUploadInterceptor`拦截器来处理文件上传请求。在处理文件上传时,开发者需要在...
在本项目中,我们关注的是如何使用Struts2来实现实时的文件交互操作,即文件的上传与下载。 文件上传在Web应用中很常见,例如用户提交表单时可能需要附加文件,如简历、图片或文档等。Struts2提供了一套完整的机制...
网上的Struts2进行的文件下载一般都是单文件或者固定的文件,并没有(很少)实现随意文件的下载的例子 提供多文件上传,上传成功后,提供刚上传的文件下载功能(其他的都可以在其上面进行扩充) 多文件 上传 下载...
描述中的链接指向了CSDN博主johnjobs的一篇文章,这篇文章详细解释了如何在Struts2中实现文件上传。博主可能讨论了以下关键点: 1. **配置Struts2 Action**:在`struts.xml`配置文件中,你需要定义一个Action,该...
struts2中实现文件上传 struts2中实现CRUD struts2中的OGNL struts2的新表单标志的使用 struts2与AJAX一 struts2与AJAX二 struts2与AJAX三 struts2中用Spring实现IOC struts2中的零配置与IOC struts2介绍之使用连接...
Struts2作为Controller层,通过Action类来实现业务逻辑,并通过配置文件或注解来定义Action与URL的映射关系。 Jquery是一个高效的JavaScript库,简化了HTML文档遍历、事件处理、动画以及Ajax交互。它使得开发者能更...
总结起来,使用Struts实现文件上传下载涉及前端表单设计、后端处理逻辑、文件存储策略以及安全控制等多个方面。在实践中,我们还需要考虑到性能优化和用户体验提升,例如使用异步上传、进度条展示等技术。
本篇文章将详细讲解如何利用Struts2.2和Hibernate3.6实现文件的上传与动态下载。 **一、文件上传** 1. **环境配置**:首先,你需要一个集成开发环境,例如MyEclipse8.6,并安装所需的Struts2.21、JUnit4.8.2以及...
这个“Struts2接口文档”是开发者的重要参考资料,提供了关于Struts2框架内各个组件、类库以及接口的详细说明,帮助开发者深入理解框架的内部工作原理并有效地使用其功能。 Struts2的核心组件包括Action、Result、...
从给定的文件信息来看,标题“struts2中文学习文档”和描述“struts2的根本webwork2”表明这是一份关于Struts2框架的学习资料,特别强调了Struts2与WebWork2的关系。Struts2是Apache Struts的一个版本,它是一个用于...
在Struts中实现文件下载是一项常见的功能,尤其在处理用户请求获取服务器上的静态或动态资源时。这篇博文将深入探讨如何在Struts框架下实现文件下载的功能。 首先,我们需要了解文件下载的基本原理。当用户点击下载...
Struts2提供了内置的支持来实现文件下载,通过配置`<result>`元素的类型为`stream`来指定下载行为。 ```xml <param name="contentType">application/octet-stream <param name="inputName">byteArray ...
通过上述步骤,我们就可以在Struts2框架下实现文件流方式的下载功能,无论是Excel、TXT还是图片,都能有效地直接返回给浏览器,让客户端进行下载。这种方式既节省了服务器资源,也提高了用户体验。在实际项目中,...
在Eclipse环境中,使用Struts2框架实现文件的上传和下载是常见的Web开发任务。Struts2是一个强大的MVC框架,提供了丰富的功能来处理用户请求和响应,包括文件操作。以下是一个详细的步骤和知识点解析: 1. **Struts...
Struts1和Struts2是两个非常著名的Java Web框架,它们都提供了处理文件上传和下载的功能,但实现方式有所不同。本文将深入探讨这两个框架在文件操作方面的具体实现。 首先,让我们了解一下Struts1中的文件上传功能...