在导出文件的时候,导出内容是空的。 看了下名字是中文的,然后就把中文改成了英文试了下,导出是正常的。
看了下代码
fileName = URLEncoder.encode(fileName, "UTF-8");
是有用URLEncoder.encode处理的,应该没啥问题啊。
在header那把utf-8转成英文的 charset=iso-8859-1是英文的编码
response.setHeader("Content-Disposition", "attachment; filename="
+ new String(fileName.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1));
这样处理就行了。
导出的代码:
//导出文件
public void downFile(HttpServletResponse response, String fileName, String pathName)
throws IOException {
fileName = URLEncoder.encode(fileName, "UTF-8");
//设置文件头:最后一个参数是设置下载文件名
response.setCharacterEncoding("UTF-8");
response.setContentType("application/octet-stream;");
response.setHeader("Content-Disposition", "attachment; filename="
+ new String(fileName.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1));
try (DataInputStream in = new DataInputStream(new FileInputStream(new File(pathName)));
//输出流
OutputStream out = response.getOutputStream()) {
byte[] bufferOut = new byte[2048];
int bytes;
while ((bytes = in.read(bufferOut)) != -1) {
out.write(bufferOut, 0, bytes);
}
} catch (IOException e) {
e.getMessage();
}
}
总结:
在处理中文的时候,因为浏览器编码的问题,除了URLEncoder.encode处理后,再把文件名的中文编码改成英文编码,这样通用性更好。