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

    http://elf8848.iteye.com/blog/640964

    http://elf8848.iteye.com/blog/275823

    struts2.xml配置:

    1         <action name="ExportDB" class="edu.xjtu.sei.xxxx.action.DBManager.ExportDBAction">
    2             <result name="success" type="stream">
    3                 <param name="contentType">application/octet-stream</param>
    4                 <param name="inputName">inputStream</param>                
    5                 <param name="bufferSize">409600</param>
    6                 <param name="contentDisposition">attachment;filename="${filename}"</param>
    7                 <param name=""></param>
    8             </result>    
    9         </action > 


    ExportDBAction.java

    import java.io.BufferedReader;
    import java.io.ByteArrayInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.Iterator;
    import java.util.List;
    
    import org.apache.struts2.json.annotations.JSON;
    import com.opensymphony.xwork2.ActionSupport;
    
    import edu.xjtu.sei.xxx.business.dao.HostInfectDAO;
    import edu.xjtu.sei.xxx.util.DateUtils;
    
    public class ExportDBAction extends ActionSupport{
        String filename;
        String flag;
        String errormessage;
        String properties;
        
        private HostInfectDAO hostinfectdao;
       public void setHostInfectDAO(HostInfectDAO hostinfectdao) {
            this.hostinfectdao = hostinfectdao;
        }
        
    public String getProperties() {
            return properties;
        }
        public void setProperties(String properties) {
            this.properties = properties;
        }
        boolean success;
        public String execute() {
    
    success
    =true; return SUCCESS;
    }
    public String getFilename() { return filename; } public void setFilename(String filename) { this.filename = filename; } public String getFlag(){ return flag; } public void setFlag(String flag){ this.flag=flag; } public String getErrormessage() { return errormessage; } public void setErrormessage(String errormessage) { this.errormessage = errormessage; } public boolean isSuccess() { return success; } public void setSuccess(boolean success) { this.success = success; } public InputStream getInputStream() throws IOException { List results=null; StringBuilder export=new StringBuilder(); results=hostinfectdao.getExportDB(flag); export.append("IP,域名,时间"+"\n"); for (Iterator iter = results.iterator(); iter.hasNext();) { Object[] row=(Object[]) iter.next(); String ip=row[0].toString(); String dns=row[1].toString(); String time=DateUtils.formatDateEx((Date)row[3]).toString(); export.append(ip+","+dns+","+time+"\n"); } ByteArrayInputStream stream = new ByteArrayInputStream(export.toString().getBytes("gbk")); return stream; } public static void main(String args[]) throws IOException{ ExportDBAction a=new ExportDBAction(); a.setProperties("1"); a.getInputStream(); } }


    请求action的js函数:

    function exportTable(filename,flag){
            //window.location.href = "ExportDB.action?filename="+filename+".csv&flag="+flag+"&contentType=application/octet-stream";
         window.location.href = "ExportDB.action?filename="+filename+".csv&flag="+flag;
    }

    之前IE浏览器下载的时候一直自动打开文件。
    那时struts.xml里的<param name="contentDisposition">attachment;filename="${filename}"</param>

    是这样写的:<param name="contentDisposition">filename="${filename}"</param>

    后来把attachment加上就好了。

    参考文章说的很清楚:

    要直接下载一个文件,我们需要做两件事,

    第一件事是:设定响应的内容类为“application/octet-stream”,大小写无关。

    第二件事是:设置HTTP的响应头名字为:Content-Disposition,设定值为:attachment;   filename   =   theFileName。这里的theFileName就是出现在文件下载对话框里的默认文件名,通常和所下载的文件名字相同,但也可以不同。

    jsp页面的实现代码:

    html代码:

          <%  
          //   得到文件名字和路径  
          String   filename   =   "MengxianhuiDocTest.doc";  
          String   filepath   =   "D:\\";  
           
          //   设置响应头和下载保存的文件名  
          response.setContentType("APPLICATION/OCTET-STREAM");  
          response.setHeader("Content-Disposition",  
          "attachment;   filename=\""   +   filename   +   "\"");  
         
          //   打开指定文件的流信息  
          java.io.FileInputStream   fileInputStream   =  
          new   java.io.FileInputStream(filepath   +   filename);  
             
          //   写出流信息  
          int   i;  
          while ((i=fileInputStream.read())   !=   -1)   {  
            out.write(i);  
          }  
          fileInputStream.close();  
          out.close();  
        %>   
  • 相关阅读:
    【转】每天一个linux命令(41):ps命令
    【转】每天一个linux命令(40):wc命令
    【转】每天一个linux命令(39):grep 命令
    【转】每天一个linux命令(38):cal 命令
    【转】每天一个linux命令(37):date命令
    【转】每天一个linux命令(36):diff 命令
    【转】每天一个linux命令(35):ln 命令
    【转】每天一个linux命令(34):du 命令
    诗词、对联名句(千古名帖)
    诗词、对联名句(千古名帖)
  • 原文地址:https://www.cnblogs.com/peterpanzsy/p/3081258.html
Copyright © 2011-2022 走看看