自己写Demo的时候总会遇到各种各样的问题,在博客记下我的心得,也希望遇到和我一样问题的同学可以少走弯路。
以下是struts2实现文件下载的方法:
1.创建Action类,包含返回InputStream的方法,该方法主要是将下载文件以字节流返回。
2.struts.xml中设置result类型是stream,其他需要设置的属性: contentType、inputName、contentDisposition、bufferSize
以下是FileDownloadAction:
public class FileDownAction extends ActionSupport {
//依赖注入属性,注入struts.xml文件inputPath。
private String inputPath;
public void setInputPath(String inputPath) {
this.inputPath = inputPath;
}
//返回字节流,在struts.xml中设置的inputName属性的值是该方法名字除去get(targetFile)
public InputStream getTargetFile()throws Exception{
return ServletActionContext.getServletContext().getResourceAsStream(inputPath);
}
public String execute()throws Exception{
return SUCCESS;
}
}
以下是strutsx.xml,的action
<action name="fileDownAction" class="com.down.action.FileDownAction">
<!-- 设定文件路径 -->
<param name="inputPath">/down/01.jpg</param>
<result name="success" type="stream">
<!--设定文件头。书上说是image/jpg,执行后图片直接打开,没有下载 -->
<param name="contentType">application/octet-stream</param>
<!-- 去掉get的字节流方法名 -->
<param name="inputName">targetFile</param>
<!-- 下载默认文件名 -->
<param name="contentDisposition">filename="nami.jpg"</param>
<!-- 设定下载文件的缓冲大小 -->
<param name="bufferSize">4096</param>
</result>
</action>
*******************************************
以下说一下我在写DEMO过程中遇到的问题:
1.以上代码写好,部署到tomcat后,执行出现java.lang.IllegalArgumentException: Can not find a java.io.InputStream with the name [targetFile] in the invocation stack 异常。
解决方法:
因为inputStream方法返回的是null值,我的tomcat没有将down文件(就是存放下载源的文件)部署上去,修改Myeclipse设置:工程文件右键 properties-->Myeclipse-->Deployment Assembly,Add一个down文件(我的文件在工程文件根目录下),然后设置Delpoy Path(/down),重新部署,问题解决。实在不行,可以直接复制上去。
2.打开网页后发现图片直接打开,没有弹出下载页面。前提:image/jpeg已经测试过
凑合的解决方法:
因为struts.xml中contentType(就是文件头)设置不对。将它设置成application/octet-stream,在chrome和firefox中可以下载,ie中还是不行。估计是IE分析文件方式独特或者不提供图片下载(图片另存为),看到一个同学用依赖注入来设定contentType,地址是:http://xiaolongfeixiang.iteye.com/blog/662479
*补充:测试过txt、jpg、rar、exe等四种格式在ie9中下载。ie9自动打开txt和jpg,rar和exe则可以下载。
firefox和chrome则以上四个都可以下载。
分享到:
相关推荐
在这个“Struts2实现文件下载功能”的示例中,我们将深入探讨如何利用Struts2框架来实现在web应用中让用户下载文件的功能。 首先,我们需要理解文件下载的基本原理。在Web应用中,当用户点击一个链接或提交一个表单...
### Struts2实现文件下载:深入解析与代码实践 #### 引言 在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接口文档”是开发者的重要参考资料,提供了关于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中的文件上传功能...
在这个示例中,我们将深入探讨如何通过Struts2实现文件下载功能。 首先,我们来看一下文件下载的基本流程。当用户点击下载链接时,浏览器会向服务器发送一个新的请求,这个请求的目标是特定的Action,即`...