sy197661944
2012-01-10 15:02
浏览 186
已采纳

文件下载时,假定使用IE,可以看见 共 xxx 的大小.

文件下载时,假定使用IE,可以看见 共 xxx 的大小.

如: 下面两张图的区别.

ps: content-length 已设置.

[img]http://dl.iteye.com/upload/attachment/0061/9148/cc666eef-9917-3651-a466-7ede0b6c6218.jpg[/img]

[img]http://dl.iteye.com/upload/attachment/0061/9146/498d9e13-1e4d-371d-a397-8dd27c7c666a.jpg[/img]

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

5条回答 默认 最新

  • housen1987 2012-01-10 16:39
    已采纳

    [code="java"]采用这种方式,想要下载一个 CSV 文件,但是却直接用IE查看那个CSV文件了..
    有办法处理么?[/code]

    直接“打开下载”的方式很简单,但是也有很多弊端,例如打开txt或xls格式的,会直接打开文件的,使用我刚才给你的那个jsp用流下载,就不会出现这个问题了。

    主页面调用方式:

    [code="java"]var url="export.jsp?filename=文件路径&filepath=文件名";
    window.location.href = url;[/code]

    但是流下载又看不到总大小,其他可能存在更好的方式,但是我目前还没了解。

    打赏 评论
  • li28544071 2012-01-10 15:21

    你在是问问题,还是做笔记?

    打赏 评论
  • housen1987 2012-01-10 15:28

    如果是下载服务器上已经存在的文件,自然是可以看到文件的总大小的;
    如果文件是以流的方式下载到客户端,那么一般看不到文件总大小;
    如果文件是服务器临时生成的,那么有可能看不到文件总大小(IE不是100%准确地)。

    打赏 评论
  • housen1987 2012-01-10 15:57

    [quote]如果是下载服务器上已经存在的文件,自然是可以看到文件的总大小的;[/quote]

    我说的下载服务器已经存在的文件,意思是服务器本身就存在这个文件(可以使zip、rar、doc等格式),然后你使用方式或window.open方式,把这个文件下载下来,这个不是流方式的下载,而是直接获取文件的服务器路径,打开下载。

    流下载我这里有个例子,是我以前做系统的时候写的,应该可以通用:
    [code="java"]<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    <%@ page import = "java.io.*"%>
    <%@ page import = "java.net.*"%>
    <%

    response.reset();
        response.setCharacterEncoding("UTF-8");
    request.setCharacterEncoding("utf-8"); 
    String filename = request.getParameter("filename");
    String filepath = request.getParameter("filepath");
    response.setContentType("application/x-download");
    response.addHeader("Content-Disposition","attachment;filename="+filename); 
    try    
    

    {
    InputStream in = new FileInputStream(filepath);
    OutputStream outp = response.getOutputStream();

        int i=0;
        while((i= in.read()) != -1){    
        outp.write(i);    
    }    
    
    
        outp.close();
        in.close();        
    
        out.clear();    
        out = pageContext.pushBody();
    

    }catch(Exception e){
    e.printStackTrace();
    }
    %>[/code]

    这个获取的也是服务器文件路径,但是采用的是流方式下载,这样的话,就基本上看不到文件的总大小了。

    打赏 评论
  • housen1987 2012-01-10 16:07

    [quote]

    这个路径要怎么写呢?[/quote]

    [code="java"]

    打赏 评论

相关推荐 更多相似问题