struts 文件下载 annotation 注解版

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

文件夹目录





web.xml有关struts的配置

 
        struts2
       
            org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

   

   
        struts2
        *.action
   

   
        struts2
        *.jsp
   

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访问地址

点击下载

你可能感兴趣的:(struts 文件下载 annotation 注解版)