zoukankan      html  css  js  c++  java
  • struts2实现文件下载

    文件下载是一个很常见的功能,用struts2实现文件下载的步骤:

    一)定义一个Action类,FileDownload.java

    [java] view plain copy
    1. package com.struts2.filedownload;  
    2.   
    3. import java.io.InputStream;  
    4.   
    5.   
    6. import org.apache.struts2.ServletActionContext;  
    7.   
    8.   
    9. import com.opensymphony.xwork2.ActionSupport;  
    10.   
    11. //文件下载  
    12. public class FileDownload extends ActionSupport{  
    13.       
    14.     private int number ;  
    15.   
    16.     private String fileName;  
    17.   
    18.     public int getNumber() {  
    19.         return number;  
    20.     }  
    21.   
    22.     public void setNumber(int number) {  
    23.         this.number = number;  
    24.     }  
    25.       
    26.     public String getFileName() {  
    27.         return fileName;  
    28.     }  
    29.   
    30.     public void setFileName(String fileName) {  
    31.         this.fileName = fileName;  
    32.     }  
    33.   
    34.     //返回一个输入流,作为一个客户端来说是一个输入流,但对于服务器端是一个 输出流  
    35.     public InputStream getDownloadFile() throws Exception  
    36.     {  
    37.         if(1 == number)  
    38.         {  
    39.            this.fileName = "Dream.jpg" ;  
    40.            //获取资源路径  
    41.            return ServletActionContext.getServletContext().getResourceAsStream("upload/Dream.jpg") ;  
    42.         }  
    43.           
    44.         else if(2 == number)  
    45.         {  
    46.             this.fileName = "jd2chm源码生成chm格式文档.rar" ;  
    47.             //解解乱码  
    48.             this.fileName = new String(this.fileName.getBytes("GBK"),"ISO-8859-1");  
    49.             return ServletActionContext.getServletContext().getResourceAsStream("upload/jd2chm源码生成chm格式文档.rar") ;  
    50.         }  
    51.         else  
    52.            return null ;  
    53.     }  
    54.       
    55.     @Override  
    56.     public String execute() throws Exception {  
    57.           
    58.         return SUCCESS;  
    59.     }  
    60.   
    61. }  


    二)在struts.xml文件中配置相关信息

    [html] view plain copy
    1. <struts>        
    2.    <package name="struts2" extends="struts-default">        
    3.        <action name="FileDownload" class="com.struts2.filedownload.FileDownload">  
    4.            <result name="success" type="stream">  
    5.                <param name="contentType">text/plain</param>  
    6.                <param name="contentDisposition">attachment;fileName="${fileName}"</param>  
    7.                <param name="inputName">downloadFile</param>  
    8.                <param name="bufferSize">1024</param>  
    9.            </result>  
    10.        </action>  
    11.      
    12.    </package>  
    13.      
    14. </struts>  

    1.结果类型必须要写成 type="stream"  ,与之对应的处理类是 org.apache.struts2.dispatcher.StreamResult

    2.涉及到的参数:

    3.

    1)  <param name="contentDisposition">attachment;fileName="${fileName}"</param>

         contentDisposition默认是 inline(内联的), 比如说下载的文件是文本类型的,就直接在网页上打开,不能直接打开的才会打开下载框自己选择

    2)  attachment :下载时会打开下载框

    3)  fileName="${fileName}" :在这定义的名字是一个动态的,该名字是显示在下载框上的文件名字

    4.<param name="inputName">downloadFile</param>,这个downloadFile名字要和FileDownload.java类中的getDownloadFile()方法名去掉get 一致

    三)用于显示下载的链接界面 filedownload.jsp

    [html] view plain copy
    1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
    2. <%  
    3. String path = request.getContextPath();  
    4. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
    5. %>  
    6.   
    7. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
    8. <html>  
    9.   <head>  
    10.     <base href="<%=basePath%>">  
    11.       
    12.     <title>My JSP 'filedownload.jsp' starting page</title>  
    13.       
    14.     <meta http-equiv="pragma" content="no-cache">  
    15.     <meta http-equiv="cache-control" content="no-cache">  
    16.     <meta http-equiv="expires" content="0">      
    17.     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
    18.     <meta http-equiv="description" content="This is my page">  
    19.     <!-- 
    20.     <link rel="stylesheet" type="text/css" href="styles.css"> 
    21.     -->  
    22.   
    23.   </head>  
    24.     
    25.   <body>  
    26.     
    27.     <h2>文件下载内容:</h2><br/>  
    28.     Dream.jpg:<href="FileDownload.action?number=1">点击下载</a><br/>  
    29.     jd2chm源码生成chm格式文档.rar:<href="FileDownload.action?number=2">点击下载2</a>  
    30.       
    31.       
    32.   </body>  
    33. </html>  
  • 相关阅读:
    _bzoj1061 [Noi2008]志愿者招募【最小费用最大流】
    _bzoj2243 [SDOI2011]染色【树链剖分】
    _bzoj1013 [JSOI2008]球形空间产生器sphere【高斯消元】
    _bzoj1002 [FJOI2007]轮状病毒【瞎搞】
    leetcode 273 Integer to English Words
    leetcode 12 Integer to Roman
    leetcode 1071 Greatest Common Divisor of Strings
    lc6 ZigZag Conversion
    lc13 Roman to Integer
    leetcode 171 Excel Sheet Column Number
  • 原文地址:https://www.cnblogs.com/hoobey/p/5294323.html
Copyright © 2011-2022 走看看