/**
* 单个附件下载的方法
*/
public static void download(String doctype,String path,String filename,HttpServletRequest request,HttpServletResponse response) {
InputStream fis =null;
OutputStream toClient =null;
try {
//此处是选择我要指定的文件夹或路径进行后续路径的拼接
if(doctype.equals("unappendix")){
path = getPathByKey("arch_unAppendix_path") + path;
}
if(doctype.equals("appendix")){
path = getPathByKey("arch_Appendix_path") + path;
}
// path是指欲下载的文件的路径。
File file = new File(path);
// 取得文件名。
//String filename = file.getName();
// 取得文件的后缀名。
String ext = filename.substring(filename.lastIndexOf(".") + 1).toUpperCase();
// 以流的形式下载文件。
fis = new BufferedInputStream(new FileInputStream(path));
//设置缓冲区
byte[] buffer = new byte[fis.available()];
//读取缓冲区内容
fis.read(buffer);
//关闭缓冲区
fis.close();
// 清空response
response.reset();
// 根据获请求设置文件名编码,解决中文下载名不能下载出错问题
//获取浏览器使用的编码
String encoding = request.getCharacterEncoding();
if(encoding!=null&&encoding.length()>0){
filename = URLEncoder.encode(filename,encoding);
}else{
//默认编码是utf-8
filename = URLEncoder.encode(filename,"UTF-8");
}
//设置response的Header
response.addHeader("Content-Disposition", "attachment;filename=" +filename);
response.addHeader("Content-Length", "" + file.length());
//输出流
toClient = new BufferedOutputStream(response.getOutputStream());
response.setContentType("application/octet-stream");
toClient.write(buffer);
// 清空缓冲区并关闭流
toClient.flush();
toClient.close();
} catch (IOException ex) {
try {
fis.close();
toClient.flush();
toClient.close();
} catch (IOException e) {
e.printStackTrace();
}
ex.printStackTrace();
}
}
java文件下载中文文件名处理,适应各种浏览器
最新推荐文章于 2024-07-26 02:48:15 发布