所下载文件包含中文字符时需要进行编码:
第一种方法:
String filename = new String(file.getName().getBytes(),"ISO-8859-1");
response.getHttpResponse().setHeader("Content-Disposition", "attachment;filename=" + filename);
第二种方法:
// 支持中文名称文件,需要对header进行单独设置,不然下载的文件名会出现乱码或者无法显示的情况
String filename = URLEncoder.encode(fileName,"UTF-8");
// 设置响应头,控制浏览器下载该文件
response.setHeader("Content-Disposition", "attachment;filename=" + filename );
//通过文件路径获得File对象
文件下载代码:
public void downLoad(String fileName, String filePath,HttpServletResponse response) throws IOException {
response.reset();
response.setContentType("application/force-download");
// 支持中文名称文件,需要对header进行单独设置,不然下载的文件名会出现乱码或者无法显示的情况
// String downloadFileName = new String(fileName .getBytes(), "ISO-8859-1");
String downloadFileName = URLEncoder.encode(fileName,"UTF-8");
// 设置响应头,控制浏览器下载该文件
response.setHeader("Content-Disposition", "attachment;filename=" + downloadFileName);
//通过文件路径获得File对象
File file = new File(filePath + fileName);
FileInputStream inputStream = null;
OutputStream out = null;
try {
inputStream = new FileInputStream(file);
//通过response获取ServletOutputStream对象(out)
out = response.getOutputStream();
int length = 0;
byte[] buffer = new byte[1024];
while ((length = inputStream.read(buffer)) != -1){
//4.写到输出流(out)中
out.write(buffer,0,length);
}
} catch (IOException e) {
e.printStackTrace();
log.info("file is error" + e.getMessage());
} finally {
inputStream.close();
out.flush();
out.close();
}
}