js 假设以下文件名fileName 是后台返回
var fileName = resp.data;
fileName = encodeURIComponent(encodeURIComponent(fileName));
var url = 'fileName=' + fileName;
window.location = path + '/exportProductDetail.do?' + url;
//path为应用上下文根目录(ServletContext对象的getContextPath()方法
Controller层
public void downFile(HttpServletRequest req, HttpServletResponse response) {
File file = null;
try {
String fileName = req.getParameter("fileName");
fileName = java.net.URLDecoder.decode(fileName, "UTF-8");
fileName = DecodeUtils.decodeStr(fileName);
file = new File("/xxx/aaa", fileName);
String showName = "aaaaa.xls";
String encodeName = URLEncoder.encode(showName, StandardCharsets.UTF_8.name());
response.setContentType("application/octet-stream; charset=utf-8");
response.setHeader("Content-Disposition", "attachment; filename*=utf-8''" + encodeName);
response.setHeader("Content-Length", String.valueOf(file.length()));
try (FileInputStream is = new FileInputStream(file); OutputStream os = response.getOutputStream()) {
IOUtils.copyLarge(is, os);
response.flushBuffer();
}
} catch (IOException e) {
log.error(e.getMessage());
} finally {
if (file != null && file.exists()) {
file.delete();
}
}
}