struts 文件下载 annotation 注解版

来源:互联网 发布:加强网络管理防范制止 编辑:程序博客网 时间:2024/06/17 19:42

本文将简单介绍使用 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>

原创粉丝点击