• Struts2学习9--文件下载


    一、解决

    1)文件中文名称容易出错的问题

    2)对下载进行权限管理

    二、基本原理:

    直接链接到一个action里去,这个action执行后输出的结果类型是type="stream"类型。

    三、实现方法

    1)JSP

    <a href="<%=basePath%>fileOp/download?fileName=1.png">图片文件下载</a> 

    2)action配置

      <package name="/fileOp" extends="struts-default">
      <action name="download"  class="com.meetcomet.util.FileDownLoadAction">
           <param name="path">/download</param>
           <result name="success" type="stream">
              <param name="contentType">
                image/bmp,image/x-png,image/gif,image/pjpeg
              </param>
              <!-- 文件下载的处理方式,包括内联(inline)和附件(attachment)两种方式,而附件方式会弹出文件保存对话框,否则浏览器会尝试直接显示文件。 -->
              <param name="contentDisposition">
                attachment;filename=${fileName}
              </param>
              <param name="inputName">targetFileName</param>
              <!-- 缓冲区大小 -->
              <param name="bufferSize">2048</param>
           </result>
           <result name="error">/fail.jsp</result>
         </action>
    </package>

    3)Action

     1 public class FileDownLoadAction extends ActionSupport {
     2 
     3     private String fileName;  
     4     private String path;  
     5     private InputStream targetFileName;  
     6     
     7     public String getFileName() {
     8         return fileName;
     9     }
    10 
    11     public void setFileName(String fileName) {
    12         this.fileName = fileName;
    13     }
    14 
    15     public String getPath() {
    16         return ServletActionContext.getServletContext().getRealPath(path);
    17     }
    18 
    19     public void setPath(String path) {
    20         this.path = path;
    21     }
    22 
    23 
    24 
    25     public String execute() {
    26         // TODO Auto-generated method stub
    27         String filePath=getPath()+ "\" + getFileName();  
    28         try {  
    29             targetFileName=new FileInputStream(filePath);  
    30             return SUCCESS;  
    31         } catch (FileNotFoundException e) {  
    32             e.printStackTrace();  
    33             return ERROR;  
    34         }  
    35     
    36     }
    37 
    38     public InputStream getTargetFileName() {
    39         return targetFileName;
    40     }
    41 
    42     public void setTargetFileName(InputStream targetFileName) {
    43         this.targetFileName = targetFileName;
    44     }
    45 
    46 
    47 
    48 }
    View Code

    注意:其他例子直接把文件名写在了配置里面,如下:这种太不方便了吧。

    <package name="/fileOp" extends="struts-default">
     <action name="download"  class="com.meetcomet.util.FileDownLoadAction">
       <param name="path">/download</param>
          <param name="fileName">1.png</param>  <!-- -不一样的地方 -->
       <result name="success" type="stream">
        <param name="contentType">
         image/bmp,image/x-png,image/gif,image/pjpeg
        </param>
        <!-- 文件下载的处理方式,包括内联(inline)和附件(attachment)两种方式,而附件方式会弹出文件保存对话框,否则浏览器会尝试直接显示文件。 -->
        <param name="contentDisposition">
         attachment;filename=${fileName}
        </param>
        <param name="inputName">targetFileName</param>
        <!-- 缓冲区大小 -->
        <param name="bufferSize">2048</param>
       </result>
       <result name="error">/fail.jsp</result>
      </action>
    </package>

     

  • 相关阅读:
    子元素如何不继承父元素透明度
    js深度复制对象
    webstorm快捷键
    js触屏滑动事件
    DOM学习笔记
    attribute & property --- jquery attr() & prop()
    javascript学习笔记(通用)-2015-08
    javascript学习笔记(数组)-2015-08
    mustache语法整理
    代码优化
  • 原文地址:https://www.cnblogs.com/meetcomet/p/3414030.html
Copyright © 2020-2023  润新知