final String agent = request.getHeader("User-Agent").toLowerCase();
// 浏览器兼容
final byte[] bytes = agent.contains("msie")
|| (agent.indexOf("rv") > 0 && agent.indexOf("gecko") > 0 && agent.indexOf("firefox") == -1)
? URLEncoder.encode(fileName, "UTF-8").getBytes() : fileName.getBytes("UTF-8"); // name.getBytes("UTF-8")处理safari的乱码问题
fileName = new String(bytes, "ISO-8859-1");
if (StringUtils.isNotBlank(fileName)) {
fileName = StringUtils.replace(fileName, "+", "%20");
fileName = StringUtils.replace(fileName, "%2B", "+");
if (agent.indexOf("firefox") >= 0 || agent.indexOf("safari") >= 0) {
fileName = StringUtils.replace(fileName, "%20", "+");
}
}
// 以流的形式下载文件。
final InputStream fis = new BufferedInputStream(new FileInputStream(filePath));
final byte[] buffer = new byte[fis.available()];
fis.read(buffer);
fis.close();
// 清空response
response.reset();
// 设置response的Header
response.setHeader("Content-disposition", String.format("attachment; filename=\"%s\"", fileName));
response.addHeader("Content-Length", "" + file.length());
final OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
response.setContentType("application/octet-stream");
toClient.write(buffer);
toClient.flush();
toClient.close();
下载文件的编码问题
最新推荐文章于 2022-03-12 09:39:47 发布