我用<a href="${attachment}">[下载...]</a>下载一个服务器上的视频文件时候,我想弹出一个下载提示框,让用户选择打开或者保存。但是当${attachment}为服务器上一个视频文件时候,IE浏览器直接在页面打开,全是乱码文本。火狐则没这种问题。
http://xxx.xx.xxx.xx/2012/M00/00/00/rBMgLk685XS1ATn0AZB7ihkV57Q142.wmv是${attachment}值。而http://xxx.xx.xxx.xx/123.MP3的${attachment}值却没问题。我在网上看了一些说是IE的response.Header长度最多150字节,也有的说要response.setHeader("Content-Disposition", "attachment;filename=" + file);各种说法。求指教.怎么直接<a href="${attachment}">[下载...]</a>下载,不用流写。
http://xxx.xx.xxx.xx/2012/M00/00/00/rBMgLk685XS1ATn0AZB7ihkV57Q142.wmv是${attachment}值。而http://xxx.xx.xxx.xx/123.MP3的${attachment}值却没问题。我在网上看了一些说是IE的response.Header长度最多150字节,也有的说要response.setHeader("Content-Disposition", "attachment;filename=" + file);各种说法。求指教.怎么直接<a href="${attachment}">[下载...]</a>下载,不用流写。
index.jsp
下载链接:<a href='download.jsp?filename=text.txt'>点我下载</a>
download.jsp 代码:<%
request.setCharacterEncoding("utf-8");
String filename = (String) request.getParameter("filename");
filename = new String(filename.getBytes("ISO-8859-1"), "UTF-8");
out.println(filename);
// 得到文件的当前路径
String serverpath = request.getRealPath("\\IOTest\\download\\");
out.println("serverpath = " + serverpath);
out.println("file = " + serverpath+"\\"+filename);
File fileLoad = new File(serverpath+filename);
response.setContentType("application/octet-stream");
response.setHeader("content-disposition","attachment; filename="+filename);
long fileLength = fileLoad.length();
String length1 = String.valueOf(fileLength);
response.setHeader("Content_Length",length1);
try {
FileInputStream in = new FileInputStream(fileLoad);
OutputStream o = response.getOutputStream();
int n;
byte b[] = new byte[500];
while((n=in.read(b))!=-1){
o.write(b,0,n);
} in.close();
} catch (IOException e) {
out.println("Jsp IOException:" + e.getMessage());// e.printStackTrace();
}
out.clear();
out = pageContext.pushBody();
%>