zoukankan      html  css  js  c++  java
  • Struts2文件下载

      FileDownloadAction:这个Action负责文件的下载控制。

      Action中的fileName:接收请求传递的文件名(实际上是从页面传递过来)。

      Action中的getInputStream()方法:以流的形式读取文件,是下载文件的入口。 

    package com.test.action;
    
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.InputStream;
    import java.io.UnsupportedEncodingException;
    
    import javax.servlet.http.HttpServletResponse;
    
    import org.apache.struts2.ServletActionContext;
    
    import com.opensymphony.xwork2.ActionSupport;
    
    
    /**
     * 文件下载
     * @author Luxh
     */
    public class FileDownloadAction extends ActionSupport {
    
    
        private static final long serialVersionUID = -3036349171314867490L;
        
        //文件名
        private String fileName;
        
        public String getFileName() {
            return fileName;
        }
    
        public void setFileName(String fileName) throws UnsupportedEncodingException {
            //用UTF-8重新编码文件名,解决中文乱码
            this.fileName = new String(fileName.getBytes("ISO-8859-1"),"UTF-8");
        }
        
        public InputStream getInputStream() throws UnsupportedEncodingException, FileNotFoundException{
            HttpServletResponse response = ServletActionContext.getResponse();
            //attachment,以附件的方式下载文件,会打开保存文件对话框;inline,以内联的方式下载,浏览器会直接打开文件
            response.setHeader("Content-Disposition", "attachment;fileName="
                      + java.net.URLEncoder.encode(fileName,"UTF-8"));//java.net.URLEncoder.encode(fileName,"UTF-8")  编码转换,解决乱码
             
            //如果fileName是相对路径
            //return ServletActionContext.getServletContext().getResourceAsStream(fileName);
            //如果fileName是绝对路径
            return new FileInputStream(fileName);
        }
        
        @Override
        public String execute() throws Exception {
            return SUCCESS;
        }
        
        
    
    }

      struts.xml配置文件:

    <action name="fileDownload" class="com.test.action.FileDownloadAction">
                 <result name="success" type="stream">
                      <!-- 下载文件类型定义 --> 
                      <param name="contentType">application/octet-stream</param>
                      <!-- 下载文件流定义 --> 
                      <param name="inputName">inputStream</param>
                

                <!-- 下载文件处理方式 -->
                <param name="contentDisposition">attachment;filename="${fileName}"</param>


    <!-- 下载文件的缓冲大小 --> <param name="bufferSize">4096</param> </result> </action>

      jsp页面:

    1  <a href="fileDownload.action?fileName=<s:property value='myfilepath'/>">文件下载</a>

      fileName的值在生成页面的时候动态生成。

      如果报inputStream流找不到的异常,需要注意文件名是相对路径还是绝对路径,用相应的方法。

      

      

  • 相关阅读:
    GUI线程安全详解(二)
    如何用BlazeDS前后台数据交互
    定制Flex菜单图标
    Web App第三方组件PKDashcode&Sencha
    如何用BlazeDS更改图片
    GUI线程安全详解(一)
    Flex Spark皮肤定制
    GUI线程安全详解(三)
    (C# 基础) Array ( Copy, Clone, Clear etc.)
    System.ArgumentException: Destination array was not long enough.
  • 原文地址:https://www.cnblogs.com/luxh/p/2506707.html
Copyright © 2011-2022 走看看