Struts2 文件下载实例方法详解

为什么要用strtus2进行文件下载,因为如果你要下载的文件是中文名字,那么如果直接在页面生成一个超链接的话会造成404错误。前台向后台请求的是一串 unicode ,所以我们用基于strtus上面开发这个功能比较轻松.

1.创建一个普通的Action

 代码如下 复制代码

package org.Rudiment.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 inputPath) {
        this.inputPath = inputPath;
    }

   
    public InputStream getTargetFile() throws Exception
    {
        return ServletActionContext.getServletContext().getResourceAsStream(inputPath);
    }
}

2.配置我们的 strtus.xml 文件,我们上面的action配置如下:

 代码如下 复制代码

<action name="down" class="org.Rudiment.action.FileDownloadAction" >
                   <param name="inputPath">不懂.png</param>
                   <result name="success" type="stream">
                       <param name="contentType">image/png</param>
                       <param name="inputName">targetFile</param>
                       <param name="contentDisposition">attachment;filename="test_img.png"</param>
                       <param name="bufferSize">4096</param>
                   </result>
</action>

配置参数说明:

<param name="inputPath">不懂.png</param>   给Action中的 inputPath 变量传值
 
contentType

内容类型,和互联网MIME标准中的规定类型一致,例如text/plain代表纯文本,text/xml表示XML,image/gif代表GIF图片,image/jpeg代表JPG图片

inputName

下载文件的来源流,对应着action类中某个类型为Inputstream的属性名,例如取值为 targetFile 的属性需要编写getTargetFile()方法

contentDisposition

文件下载的处理方式,包括内联(inline)和附件(attachment)两种方式,而附件方式会弹出文件保存对话框,否则浏览器会尝试直接显示文件。取值为:

attachment;filename="struts2.txt" ,表示文件下载的时候保存的名字应为struts2.txt 。如果直接写filename="struts2.txt" ,那么默认情况是代表inline ,浏览器会尝试自动打开它,等价于这样的写法:inline; filename="struts2.txt"

bufferSize

下载缓冲区的大小

注:别忘记在Web应用根目录下面放一张 不懂.png 图片,不然会找不到文件而出错。

有时候当我们需要用户登录的时候才可以下载特定的文件。这个时候我们可以用以下的方法来实现。

1.我们负责相应下载请求的Action的源码如下:

 代码如下 复制代码

package org.Rudiment.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 inputPath) {
        this.inputPath = inputPath;
    }

    @Override
    public String execute()
    {
        if((Boolean)ServletActionContext.getRequest().getSession().getAttribute("isLogin"))
        {
            return SUCCESS;
        }
       
        return INPUT;
    }
   
    public InputStream getLargetFile() throws Exception
    {
        return ServletActionContext.getServletContext().getResourceAsStream(inputPath);
    }
}

2.strtus.xml 对应Action 的配置文件如下:

 代码如下 复制代码

<action name="down" class="org.Rudiment.action.FileDownloadAction" >
                   <param name="inputPath">不懂.png</param>
                   <result name="success" type="stream">
                       <param name="contentType">image/png</param>
                       <param name="inputName">largetFile</param>
                       <param name="contentDisposition">attachment;filename="test_img.png"</param>
                       <param name="bufferSize">4096</param>
                   </result>
                   <result name="input">/login.jsp</result>
</action>

注:通过对execute()中添加一个判断条件,判断当前的用户是否有权限来下载文件,通过返回逻辑视图(INPUT SUCCESS ERROR)这些就是逻辑视图。来控制对客户端的响应

时间: 2024-10-29 02:55:01

Struts2 文件下载实例方法详解的相关文章

Struts2 Result 参数详解_java

一个提交到服务器的处理通常可以分为两个阶段,第一个阶段查询服务器状态(查询或者更新数据库),第二个阶段选择一个合适的结果页面其返回给用户(这里要讲的Result的内容). Struts2提供了对不同种类返回结果的支持,常见的有JSP,FreeMarker,Velocity等. Struts2支持的不同类型的返回结果为: 名字 说明 Chain Result 用来处理Action链 Dispatcher Result 用来转向页面,通常处理JSP FreeMarker Result 处理FreeM

IOS中Json解析实例方法详解(四种方法)_IOS

作为一种轻量级的数据交换格式,json正在逐步取代xml,成为网络数据的通用格式. 有的json代码格式比较混乱,可以使用此"http://www.bejson.com/"网站来进行JSON格式化校验(点击打开链接).此网站不仅可以检测Json代码中的错误,而且可以以视图形式显示json中的数据内容,很是方便. 从IOS5开始,APPLE提供了对json的原生支持(NSJSONSerialization),但是为了兼容以前的iOS版本,可以使用第三方库来解析Json. 本文将介绍Tou

PHP实现文件下载断点续传详解

如果我们的网站提供文件下载的服务,那么通常我们都希望下载可以断点续传(Resumable Download),也就是说用户可以暂停下载,并在未来的某个时间从暂停处继续下载,而不必重新下载整个文件. 通常情况下,Web服务器(如Apache)会默认开启对断点续传的支持.因此,如果直接通过Web服务器来提供文件的下载,可以不必做特别的配置,即可享受到断点续传的好处.由于这些文件直接通过Web服务器来提供下载,后端脚本无法对这个下载过程进行控制.这对于仅提供公开.静态文件的网站来说不是问题,但对于需要

PHP实现文件下载断点续传详解_php技巧

如果我们的网站提供文件下载的服务,那么通常我们都希望下载可以断点续传(Resumable Download),也就是说用户可以暂停下载,并在未来的某个时间从暂停处继续下载,而不必重新下载整个文件. 通常情况下,Web服务器(如Apache)会默认开启对断点续传的支持.因此,如果直接通过Web服务器来提供文件的下载,可以不必做特别的配置,即可享受到断点续传的好处.由于这些文件直接通过Web服务器来提供下载,后端脚本无法对这个下载过程进行控制.这对于仅提供公开.静态文件的网站来说不是问题,但对于需要

关于Struts2的类型转换详解_java

一.类型转换的意义 对于一个智能的MVC框架而言,不可避免的需要实现类型转换.因为B/S(浏览器/服务器)结构应用的请求参数是通过浏览器发送到服务器的,这些参数不可能有丰富的数据类型,因此必须在服务器端完成数据类型的转换 MVC框架是一个表现层解决方案,理应提供类型转换的支持,Struts2提供了功能非常强大的类型转换支持. 二.表现层数据的处理 1.对于web应用而言,表现层主要用于与用户交互,包括收集用户输入数据,向用户呈现服务器的状态.因此表现层的数据的流向主要有两个方向:输入数据和输出数

Android中DownloadManager实现文件下载实例详解

Android中DownloadManager实现文件下载 下载 创建下载链接 DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url)); 设置允许下载的网络环境 request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI); WIFI网络 : DownloadManager.Request.NETWORK_WIFI 移动网

JS动态加载JS文件实例方法详解

1.直接document.write  代码如下 复制代码 <script language="javascript">     document.write("<script src='test.js'></script>"); </script> 2.动态改变已有script的src属性  代码如下 复制代码 <script src='' id="s1"></script>

Struts2数据输入验证教程详解_java

一.前言 1.1.什么是输入验证?为什么需要输入验证? 在上一篇文章中,我们学习了数据类型转换,我们提到了表示层数据处理的两个方法,也提到了用户输入数据需要进行类型转换才能得到我们想要的数据,那么,我们怎么确定类型转换后的数据,是我们想要的数据呢?这里有点绕.你可以这样想:一个成年男子年龄是18岁,你现在想要得到18这个数据,但是,用户输入32,经过类型转换也是对的,但是数据不是你想要的.这时候,我们要怎么办?所以输入验证在这里就有用处了. 类型转换和输入验证的关系是:类型转换是输入验证的前提,

利用Python破解验证码实例详解_python

一.前言 本实验将通过一个简单的例子来讲解破解验证码的原理,将学习和实践以下知识点:       Python基本知识       PIL模块的使用 二.实例详解 安装 pillow(PIL)库: $ sudo apt-get update $ sudo apt-get install python-dev $ sudo apt-get install libtiff5-dev libjpeg8-dev zlib1g-dev \ libfreetype6-dev liblcms2-dev lib