文件下载时,假定使用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]

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

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

主页面调用方式:

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

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

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

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

[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]

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

[quote]

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

[code="java"]