1、静态html文件中,可以是任意元素的点击事件触发下面的js脚本程序。解决了firefox和ie的文件名乱码的问题。
2、js文件:
function loadMobileClient(){
var url = "mobileClient/loadMobileClient.htm?";
window.location.href=url + 'filename=' + encodeURIComponent("19.wmv");
}
3、java文件:
public ModelAndView loadMobileClient(HttpServletRequest request, HttpServletResponse response){
try {
request.setCharacterEncoding("utf-8");
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
String filename=request.getParameter("filename");
File file=new File("d:/"+filename);
response.setCharacterEncoding("UTF-8");
//写明要下载的文件的大小
response.setContentLength((int)file.length());
response.reset();
response.setContentType("application/octet-stream");
String agent = (String)request.getHeader("USER-AGENT");
if(agent != null && agent.indexOf("MSIE") == -1) {
// FF
String enableFileName = "";
try {
enableFileName = new String(filename.getBytes("UTF-8"),"ISO-8859-1");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
response.setHeader("Content-Disposition", "attachment; filename=" + enableFileName);
} else {
try {
response.setHeader("Content-Disposition", "attachment;filename=" + java.net.URLEncoder.encode(filename, "UTF-8"));
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
}
response.setHeader("Connection", "close");
try {
FileInputStream fis=new FileInputStream(file);
BufferedInputStream buff=new BufferedInputStream(fis);
byte [] b=new byte[1024];//
long k=0;
OutputStream myout=response.getOutputStream();
while(k
int j=buff.read(b,0,1024);
k+=j;
myout.write(b,0,j);
}
myout.flush();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
已测试,完成!