Struts2 文件下载实例方法详解

作者:简简单单 2013-11-03

为什么要用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配置如下:

 代码如下 复制代码


                   不懂.png
                  
                       image/png
                       targetFile
                       attachment;filename="test_img.png"
                       4096
                  


配置参数说明:

不懂.png   给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 的配置文件如下:

 代码如下 复制代码


                   不懂.png
                  
                       image/png
                       largetFile
                       attachment;filename="test_img.png"
                       4096
                  

                   /login.jsp

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

相关文章

精彩推荐