现在能生成csv文件。如何能弹出下载打开对话框。给个例子。。

解决方案 »

  1.   

    1.最直接最简单的,方式是把文件地址直接放到html页面的一个链接中。这样做的缺点是把文件在服务器上的路径暴露了,并且还无法对文件下载进行其它的控制(如权限)。这个就不写示例了。2.在服务器端把文件转换成输出流,写入到response,以response把文件带到浏览器,由浏览器来提示用户是否愿意保存文件到本地。(示例如下)<%
     response.setContentType(fileminitype);
     response.setHeader("Location",filename);
     response.setHeader("Cache-Control", "max-age=" + cacheTime);
         //filename应该是编码后的(utf-8)
     response.setHeader("Content-Disposition", "attachment; filename=" + filename); 
     response.setContentLength(filelength);
     OutputStream outputStream = response.getOutputStream();
     InputStream inputStream = new FileInputStream(filepath);
     byte[] buffer = new byte[1024];
     int i = -1;
     while ((i = inputStream.read(buffer)) != -1) {
      outputStream.write(buffer, 0, i);
      }
     outputStream.flush();
     outputStream.close();
     inputStream.close();
     outputStream = null;
          %>3.既然是JSP的话,还有一种方式就是用Applet来实现文件的下载。不过客户首先得信任你的这个Applet小程序,由这个程序来接受由servlet发送来的数据流,并写入到本地。servlet端示例public void service(HttpServletRequest req, HttpServletResponse res)
                throws ServletException, IOException {
            res.setContentType(" text/plain ");
            OutputStream outputStream = null;
            try {
                outputStream = res.getOutputStream();
                //把文件路径为srcFile的文件写入outputStream中
                popFile(srcFile, outputStream)) ;
            } catch (IOException e) {
                e.printStackTrace();    
         }
              }
      

  2.   

    可以在action 或servlet中设置 ,这是自己写的一个excel导出的例子,可以参考改下
    if(code.equals("export")){
    response.setContentType("octets/stream");
    response.addHeader("Content-Disposition", "attachment;filename=wlzhk.xls");

    String title = "单位往来帐";
    String[] headers = {"日期","单据编号","摘要","销售额","收入金额","应收余额"};
    String pattern = "yyyy-MM-dd"; try {
    OtherDao dao = new OtherDao();
    List<Wlzhk> dataset = dao.exportwlzhk(userid);

    OutputStream out =response.getOutputStream();

    ExportFile_POI<Wlzhk>  exf = new ExportFile_POI<Wlzhk>();
    exf.exportExecl(title, headers, dataset, out, pattern);

    out.close();

    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
      

  3.   

    // attachment:作为附件下载 | inline:在线打开
    response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\";");
    // 一定要保证没有做过关于禁止浏览器缓存的操作
    // response.setHeader("Pragma", "No-cache"); 
    // response.setHeader("Cache-Control", "No-cache"); 
    // response.setDateHeader("Expires", 0);