Struts2文件下载

读者可能会觉得实现文件下载太简单了,使用一个超级链接,在链接的href属性中指定要下载的文件就可以了! 的确,这样可以实现文件下载,但是如果遇到下载的是中文文件或者是需要为下载文件设置权限时,就变得无能为力了。

 

一、    Struts2 实现文件下载

使用Struts2框架来控制文件的下载,关键是需要配置一个stream类型的结果,需要指定下面4个属性:

  contentType属性:指定被下载文件的文件类型。 和互联网MIME标准中的规定类型一致,如text/plain代表纯文本,text/xml代表XML,image/gif代表GIF图片,iamge/jpeg代表JPG图片

  inputName属性: 指定被下载文件的入口输入流。 例如,下面定义的Action的下载文件输入流入口为getTargetFile()方法,所以这里要相应的指定为targetFile。

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

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

  bufferSize属性: 指定下载文件时缓冲区大小。

 

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

二、    在配置文件中指定下载资源

1、    文件下载业务控制器

 

   public class MyDownload extends ActionSupport {

    /**

     *

     */

    private static final long serialVersionUID = 1L;

    private String inputPath;

    public void setInputPath(String inputPath) {

       this.inputPath = inputPath;

    }

    //根据配置文件inputPath属性值返回一个InputStream类型值

    public InputStream getTargetFile() throws Exception{

return ServletActionContext.getServletContext()

.getResourceAsStream(inputPath);

    }  

    public String execute()throws Exception{

       return SUCCESS;

    }

}

   

2、    相应的Action的配置:

 

        <action name="download" class="download.MyDownload">

            <!—指定资源下载位置 -->

           <param name="inputPath">/download/xiao.jpg</param>

            <!—指定success逻辑视图为一个stream类型,即流视图 -->

           <result name="success" type="stream">

            

                <!—下载文件类型 -->

              <param name="contentType">iamge/jpg</param>

                 <!—下载文件位置 -->

              <param name="inputName">targetFile</param>

              <param name="contentDisposition">

filename="hello.jpg"

</param>

 <!—缓冲区大小 -->

              <param name="bufferSize">2000000</param>

           </result>

       </action>

 

 

三、    在Action中指定下载资源(动态指定下载资源)

1、    动态指定下载资源的业务控制器

 

    public class Ddownload extends ActionSupport {

    /**

     *

     */

    private static final long serialVersionUID = 1L;

    private String inputPath;// 下载文件的入口输入流

    private String contentType;//文件类型

    private String filename;//指定下载后的文件名

   

    public void setInputPath(String inputPath) {

       this.inputPath = inputPath;

    }

    public String getContentType() {

       return contentType;

    }

    public void setContentType(String contentType) {

        this.contentType = contentType;

    }

    public String getFilename() {

       return filename;

    }

    public void setFilename(String filename) {

       this.filename = filename;

    }

 

 

 

    public InputStream getTargetFile() throws Exception{

          return ServletActionContext.getServletContext()

.getResourceAsStream(inputPath);

    }

   

    public String execute()throws Exception{

       //调用相关业务逻辑方法,动态设置相关下载信息

       inputPath="/download/xiao.jpg";

       filename="test.jpg";

       contentType="image/jpg";

 

       return SUCCESS;

    }

}

 

2、    相应的Action配置文件

 

              <action name="Ddownload" class="download.Ddownload">

           <result name="success" type="stream">

              <param name="contentType">${contentType}</param>

              <param name="inputName">targetFile</param>

              <param name="contentDisposition">

filename="${filename}"

</param>

              <param name="bufferSize">2000000</param>

           </result>

      </action>

 

四、     文件下载的权限控制

明白了Struts2框架文件下载的原理后,就很容易实现文件下载的权限控制,可以在Action的execute()方法中加入用户合法身份的验证。当然,也可以使用拦截器来实现权限的控制,在拦截器中通过检查session对象同样可以限制权限。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值