struts 文件下载 annotation 注解版

本文将简单介绍使用 struts2 ,通过零配置和 annotation 实现文件下载功能。

文件夹目录





web.xml有关struts的配置

 <filter>
        <filter-name>struts2</filter-name>
        <filter-class>
            org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>*.action</url-pattern>
    </filter-mapping>
    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>*.jsp</url-pattern>
    </filter-mapping>

Action代码

package com.nos.java.action.downl;


import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;


import org.apache.struts2.ServletActionContext;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.ParentPackage;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.ResultPath;
import org.apache.struts2.convention.annotation.Results;


import com.nos.base.action.BaseAction;


/**
  * 文件下载
  * 
  */
 @Results({   
         @Result(params = {
                 // 下载的文件格式
                 "contentType", "application/octet-stream",   
                 // 调用action对应的方法
                 "inputName", "inputStream",   
                 // HTTP协议,使浏览器弹出下载窗口
                 "contentDisposition", "attachment;filename=\"${fileName}\"",   
                 // 文件大小
                 "bufferSize", "10240"},   
                 // result 名
                 name = "download", 
                 // result 类型
                 type = "stream")   
 })  
 public class DownloadAction extends BaseAction{
      
     private static final long serialVersionUID = 1L;
  
     /**  
      * 下载文件名
      * 对应annotation注解里面的${fileName},struts 会自动获取该fileName
      */  
     private String fileName;   
    
     public String getFileName() {   
       return fileName;   
     }   
    
     public void setFileName(String fileName) {   
         this.fileName = fileName;   
     }  
      
     /**  
      * 下载文件应访问该地址
      * 对应annotation注解里面的 name = "download"
      */  
     public String testDownload() {   
         return "download";   
     }   
         
     /**  
      * 获取下载流
      * 对应 annotation 注解里面的 "inputName", "inputStream"
      * 假如 annotation 注解改为 "inputName", "myStream",则下面的方法则应改为:getMyStream
      * @return InputStream  
      */  
     public InputStream getInputStream() {   
          
         // 文件所放的文件夹
         String path = ServletActionContext.getServletContext().getRealPath("/")+"\\app\\";
          
         // 下载路径
         String downLoadPath = path + fileName;
          
         // 输出
         try {   
             return new FileInputStream(downLoadPath);   
         } catch (FileNotFoundException e) {   
             e.printStackTrace();   
         }   
         return null;   
     }   
 }

URL访问地址

<a href="${ipUrl}/downl/download!testDownload.action?fileName=VR.apk">点击下载</a>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值