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