`
xudongcsharp
  • 浏览: 468485 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

struts2实现简单的文件下载功能(支持多类型下载)

阅读更多
本文出自:http://hi.baidu.com/dinguangx/blog/item/17fcf3f330f01a56342acc1f.html


文件下载相对于文件上传要简单得多,最简单的方式就是直接在页面上给出一个下载文件的链接,使用Struts 2框架来控制文件的下载,关键是需要配置一个stream类型的结果,需要指定下面4个属性。

contentType属性:指定被下载文件的文件类型,默认为text/plain。

inputName属性:指定被下载文件的入口输入流。

contentDisposition属性:指定下文件的文件名称。

bufferSize属性:指定下载文件时的缓冲区大小,默认的是1024字节。

配置上面4个属性,既可以在配置文件中配置,也可以在Action中设置该属性来完成配置。

假设现在要下载的是web应用下的upload目录下的test.doc

其中进行处理的Action清单(DownloadAction.java)如下:

public class DownloadAction extends ActionSupport {

private String fileName = "test.doc";

public void setFileName(String fileName){
   this.fileName = fileName;
}

public String getFileName(){
   return this.fileName;
}

public InputStream getDownloadFile() {
   System.out.println(fileName);
 
   return ServletActionContext.getServletContext().getResourceAsStream(
     "/upload/" + fileName);
}

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

}

进行struts.xml的配置,配置的主要代码如下:

   <action name="download" class="com.upload.struts2.action.DownloadAction">
   <result name="success" type="stream">
    <param name="contentType">application/vnd.ms-word</param>
    <param name="contentDisposition">filename=“test.doc”</param>
    <param name="inputName">downloadFile</param>
   </result>
   </action>

在进行配置的时候,里面的contentType为要下载的文件对应的MIME类型,inputName标签中的值是在Action中定义的获取inputStream的方法名称,一定要保证它们是一致的,即这里的getDownloadFile()与downloadFile名称是一致的。

如果想要动态地获取文件的名称,因为在Action中,已经有了fileName这个属性,就可以在struts.xml中直接调用。方法为 <param name="contentDisposition">filename=${fileName}</param>把原来的替换掉就可以了。

其它的几个属性,比如contentType,buffer之类的都可以通过类似的方法来设置。

附加:
---------------------------
上面支持下载文件类型为word文档,如果想支持多种格式下载需要把contentType
配置活,操作如下:
修改配置文件:
<param name="contentType">${contentType}</param>
修改Action类:
//输出流Content Type   
    public String contentType;   
    public void setContentType(String contentType) {
this.contentType = contentType;
     }

    public String getContentType() {
return contentType;
     }
public InputStream getDownloadFile() {
   System.out.println("成功下载附件:"+fileName);
   //获取格式
   String f=fileName.substring(fileName.lastIndexOf(".")+1, fileName.length());
   System.out.println("下载格式为"+f);
   if(f.equals("xls")){
   contentType = "application/vnd.ms-excel";   
   }else if(f.equals("doc") || f.equals("docx")){
   contentType = "application/vnd.ms-word"; 
   }
   return ServletActionContext.getServletContext().getResourceAsStream(
     "/uploadimage/" + fileName);
}
备注:具体struts支持的下载类型格式参考一下网站:http://www.w3schools.com/media/media_mimeref.asp
分享到:
评论

相关推荐

    深入浅出Struts2(附源码)

    作者处处从实战出发,在丰富的示例中直观地探讨了许多实用的技术,如数据类型转换、文件上传和下载、提高Struts 2应用的安全性、调试与性能分析、FreeMarker、Velocity、Ajax,等等。跟随作者一道深入Struts 2,聆听...

    深入浅出Struts 2 .pdf(原书扫描版) part 1

    如数据类型转换、文件上传和下载、Struts2应用的安全性、调试与性能分析、FreeMarker、Velocily、Ajax,等等。跟随作者一道深入Struts2。聆听大量来之不易的经验之谈。你对Struts2开发框架的理解和应用水平都将更上...

    低清版 大型门户网站是这样炼成的.pdf

    2.2.2 struts 2属性配置文件struts.properties详解 55 2.2.3 struts 2核心配置文件struts.xml详解 57 2.3 struts 2应用开发实务 61 2.3.1 struts 2应用开发环境的搭建 62 2.3.2 struts 2应用基本开发步骤—搭建...

    PHPCMS 文件管理器(原Longbill文件管理器) v4.03

    多用户,权限管理,可以分配用户各自的操作目录和可操作的文件类型。 5.两种浏览方式:列表模式和图标模式。 6.在图标模式下可以预览图片文件的缩略图。 7.强大的编辑器可以实现自动缩进,显示行号 和 字符...

    JAVA上百实例源码以及开源项目

     Java语言开发的简洁实用的日期选择控件,源码文件功能说明:  [DateChooser.java] Java 日期选择控件(主体类) [public]  [TablePanel.java] 日历表格面板  [ConfigLine.java] 控制条类  [RoundBox.java] ...

    ssh(structs,spring,hibernate)框架中的上传下载

    Struts+Spring+Hibernate实现上传下载    本文将围绕SSH文件上传下载的主题,向您详细讲述如何开发基于SSH的Web程序。SSH各框架的均为当前最新版本:  •Struts 1.2  •Spring 1.2.5  •Hibernate 3.0  本文...

    Java Web程序设计教程

    6.5.3struts2文件下载实现方式 141 本章小结 143 课后练习 144 第7章 struts2中应用模板语言 145 7.1模板语言简介 145 7.2应用velocity 146 7.2.1velocity基础 146 7.2.2struts2对velocity的支持 153 7.3...

    JAVA整合HTML5实现扫描二维码功能项目源码

    项目使用环境以及工具: Eclipse,JDK1.7,struts2,HTML5,Jquery,QRCode HTML5技术支持WebApp在手机上拍照,显示在页面上并上传到...这是手机微博应用中常见的功能,当然你也可以在其它类型应用中适当使用此技术。

    java开源包10

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java web技术开发大全(最全最新)

    《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+Spring+Ajax》内容包括Web客户端技术、JSP/Servlet技术、Struts 2(*、类型转换、输入校验、上传和下载文件、Struts 2的各种标签、对 AJAX的支持等)、Spring...

    JAVA上百实例源码以及开源项目源代码

    Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,日期选择 Java语言开发的简洁实用的日期选择控件,源码文件功能说明: [DateChooser.java] Java 日期选择控件(主体类) [public] ...

    java开源包2

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java开源包3

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    JavaFan 建站系统 v3.9.16.rar

    框架:struts2 spring3 hibernate4 freemarker2.3 mysql5 quartz flazr 1.系统内置了几套模块,可自由切换,通过修改WEB-INF\classes\spring-core.xml 文件的28行,现有可选的模版有:bbs、blogBaby、blogBlack...

    java开源包4

    JCaptcha4Struts2 是一个 Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (&lt;jcaptcha:image label="Type the text "/&gt; ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码...

    java web开发技术大全

    《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+Spring+Ajax》内容包括Web客户端技术、JSP/Servlet技术、Struts 2(*、类型转换、输入校验、上传和下载文件、Struts 2的各种标签、对 AJAX的支持等)、Spring...

Global site tag (gtag.js) - Google Analytics