-
今天写了个下载文件的需求,要求在浏览器中访问图片、文件直接下载,这个项目没有用nginx做服务器,不能直接配置 所以我想找一下tomcat有没有相关配置,找了一会,在外部tomcat 配置文件server.xml里到时有,但是springboot内嵌了tomcat,没有找到在哪里,我怀疑可能要拦截器或者继承个tomcat的方法,但时间紧急,先用其他方法解决了。
-
后台暴力解决
直接传要要下载文件的相对路径,后台拼装,找到文件具体地址,添加mimeType = “application/octet-stream”;属性,返回流
@RequestMapping("/downloadFile")
@ModDesc(desc = "下载资源", pDesc = "下载文件路径", pType = String.class, rDesc = "文件流", rType = String.class)
public void downloadPDFResource(HttpServletRequest request, HttpServletResponse response,
@RequestParam("fileName") String fileName) throws IOException {
BinaryUtils.checkEmpty(fileName, "fileName");
File file = new File(localSlaveRoot + fileName);
if (file.exists()) {
String mimeType = URLConnection.guessContentTypeFromName(file.getName());
if (mimeType == null) {
mimeType = "application/octet-stream";
}
response.setContentType(mimeType);
response.setHeader("Content-Disposition", String.format("attachment; filename=\"" + file.getName() + "\""));
response.setContentLength((int) file.length());
InputStream inputStream = new BufferedInputStream(new FileInputStream(file));
FileCopyUtils.copy(inputStream, response.getOutputStream());
}
}
- 前台js解决,适用于谷歌浏览器
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<p id="demo" onclick="download()">download</p>
<script>
function download() {
var x = new XMLHttpRequest();
var imageurl = "http://192.16:1665/tarsier-dcv/rsm/1024/defaultIcon/1.txt"
x.open("GET", imageurl, true);
x.responseType = 'blob';
x.onload = function (e) {
var url = window.URL.createObjectURL(x.response)
var a = document.createElement('a');
a.href = url
a.download = ''
a.click()
}
x.send();
}
</script>
</body>
</html>