`
xudongcsharp
  • 浏览: 477195 次
  • 性别: 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实现文件上传下载

    本篇文章将详细探讨如何在Struts2框架下实现文件的上传与下载。 首先,我们需要了解Struts2中的文件上传机制。Struts2提供了`FileUploadInterceptor`拦截器来处理文件上传请求。在处理文件上传时,开发者需要在...

    struts1和struts2分别实现文件上传下载功能

    Struts1和Struts2是两个非常著名的Java Web框架,它们都提供了处理文件上传和下载的功能,但实现方式有所不同。本文将深入探讨这两个框架在文件操作方面的具体实现。 首先,让我们了解一下Struts1中的文件上传功能...

    struts2实现多文件上传功能

    Struts2提供了完善的文件上传支持,让我们来详细探讨如何在Struts2中实现多文件上传。 首先,我们需要在Struts2的配置文件(struts.xml)中启用文件上传的支持。这通常涉及到添加`&lt;constant&gt;`标签来设置`struts....

    使用struts2实现的文件上传功能

    在Struts2框架中实现文件上传功能是一项常见的任务,这通常涉及到用户通过表单提交文件,服务器端接收并处理这些文件。在这个场景中,我们将探讨如何使用Struts2来实现这一功能。 首先,你需要在项目中引入Struts2...

    struts2_uploadify带进度条的多文件上传下载

    Struts2 Uploadify是一个在Java Web开发中常用的插件,它结合了Struts2框架和Uploadify jQuery插件,能够实现文件的多选、上传进度显示以及后台处理等功能。这个项目示例提供了一个完整的解决方案,使得用户在上传多...

    Struts2实现文件上传功能

    下面将详细阐述如何使用Struts2来实现文件上传功能。 1. **Struts2文件上传组件** Struts2框架集成了一个名为`struts2-convention-plugin`的插件,它提供了文件上传的支持。主要依赖于`Commons FileUpload`和`...

    Struts2实现单个文件多个文件上传与下载-多个拦截器

    要实现文件上传,你需要在Action类中定义一个字段,类型为`java.io.File`或`org.apache.struts2.dispatcher.multipart.FileItem`,并添加对应的`@FileUpload`注解。例如: ```java public class FileUploadAction ...

    Struts2实现文件上传

    在这个“Struts2实现文件上传”的主题中,我们将深入探讨如何利用Struts2框架来实现在Web应用中的文件上传功能。 首先,我们注意到一个细节描述:“private String uploadContextType;应更正为private String ...

    Struts 2中实现文件下载

    以下将详细介绍如何在Struts 2中实现文件下载,特别是处理中文文件名的问题。 首先,你需要创建一个Action类,例如`FileDownloadAction`,这个类需要包含一个方法来提供文件的输入流。通常,你会有一个属性如`...

    swfuplaod+struts2实现多文件上传

    SWFUpload 是一款开源的Flash上传组件,...通过上述步骤和注意事项,你可以利用SWFUpload和Struts2构建一个功能强大且安全的多文件上传功能。在实际项目中,根据需求进行适当的定制和优化,以满足用户需求和系统安全。

    Struts2中实现文件下载(修正中文问题).pdf

    总结来说,Struts2中实现文件下载的关键在于正确配置`struts.xml`,使用`stream`类型的结果,并处理好`Content-Disposition`中的文件名编码。对于中文文件名,需要在Action中提供编码转换的方法,并在配置文件中引用...

    struts2实现简单功能

    然而,这只是Struts2功能的冰山一角,它还包含更多高级特性,如类型转换、动态方法调用、结果类型、插件系统等,这些都是在实际项目中提升开发效率和可维护性的关键工具。通过深入学习和实践,开发者可以充分利用...

    Struts2多个文件上传

    在Struts2中,文件上传功能是一个常用特性,尤其在处理用户提交的多个文件时。本文将详细讲解如何使用Struts2进行多个文件的上传,重点是使用List集合进行上传。 首先,要实现Struts2的文件上传,必须引入必要的...

    Struts2+Jquery+Ajax

    Struts2提供了丰富的功能,如拦截器、结果类型、国际化支持等,使得开发者能够更高效地处理请求和响应。 在MVC架构中,Model负责业务逻辑,View负责展示,而Controller负责接收用户请求并调用Model进行处理,然后将...

    struts2文件上传和下载

    Struts2是一个非常流行的Java Web框架,用于构建企业级应用...通过以上步骤,开发者可以在Struts2框架下实现文件上传和下载功能,满足用户对数据交换的需求。但一定要注意安全性和性能优化,以确保应用的稳定和健壮。

    struts2文件上传下载

    在这个特定的项目中,我们关注的是"struts2文件上传下载"的功能,这涉及到用户通过Web界面上传文件到服务器,以及从服务器下载文件到用户的设备。 文件上传是Web应用中的常见需求,例如用户可能需要提交图片、文档...

    struts2实现文件下载

    ### Struts2实现文件下载:深入解析与代码实践 #### 引言 在Web应用开发中,文件的上传与下载是常见的功能需求。Struts2框架提供了强大的支持,使得开发者能够轻松实现这些功能。本文将重点介绍Struts2中文件下载...

    struts2 实现文件批量上传

    本项目实现了使用Struts2进行文件批量上传的功能,这涉及到几个关键的技术点,包括文件上传组件的选择、前端表单设计、后端处理逻辑以及存储策略。 1. **文件上传组件**:在Struts2中,我们通常使用`Commons ...

Global site tag (gtag.js) - Google Analytics