核心代码:
//解决文件下载名称变为 ____下划线的BUG
//针对IE或者以IE为内核的浏览器:
if (userAgent.contains("MSIE") || userAgent.contains("Trident")) {
//fileName 文件名
fileName = java.net.URLEncoder.encode(fileName, StandardCharsets.UTF_8.toString());
} else {
//非IE浏览器:
fileName = new String(fileName.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1);
}
文件下载代码:
@RequestMapping("doc/downlod")
public void downlod(HttpServletResponse response,HttpServletRequest request)throws IOException{
String pathString = "文件存放路径";
String fileName = "文件名";
//解决文件下载名称变为 ____下划线的BUG
//针对IE或者以IE为内核的浏览器:
if (userAgent.contains("MSIE") || userAgent.contains("Trident")) {
fileName = java.net.URLEncoder.encode(fileName, StandardCharsets.UTF_8.toString());
} else {
//非IE浏览器:
fileName = new String(fileName.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1);
}
System.out.println(fileName);
// 读到流中
InputStream inStream = new FileInputStream(pathString);// 文件的存放路径
// 设置输出的格式
response.reset();
response.setContentType("bin");
response.addHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
// 循环取出流中的数据
byte[] b = new byte[100];
int len;
try {
while ((len = inStream.read(b)) > 0)
response.getOutputStream().write(b, 0, len);
inStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
前台:
//button标签 绑定onclick事件
function downlod(file){
var keyword = $("#keyword").val();
var url = ctxPath + "/doc/downlod";
window.open(url)
}