从本地获取文件,然后发送给前端。前端可以直接下载。
后端代码
@ResponseBody
@GetMapping(value = "/getFile")
public void getFile(HttpServletResponse response){
String FilePath="D:/pdf/123.pdf";//文件路径
response.setCharacterEncoding("utf-8");
response.setContentType("multipart/form-data");
response.setHeader("Content-Disposition", "123.pdf");//文件名
response.setHeader("Access-Control-Expose-Headers","Content-Disposition");
File file = new File(FilePath);
if(file.exists()&&file.isFile()){
try {
InputStream inputStream = new FileInputStream(file);
OutputStream outputStream = response.getOutputStream();//获取response的输出流对象
IOUtils.copy(inputStream,outputStream);
//刷新输出流
outputStream.flush();
//关闭输出流
outputStream.close();
inputStream.close();
}catch (Exception e){
e.printStackTrace();
}
}
}
前端代码
原生Ajax
getFile(){
let url = baseUrl+"/upload/getFile";
let xhr = new XMLHttpRequest();
xhr.open('GET', url, true);
xhr.setRequestHeader("content-type", "application/x-www-form-urlencoded");
xhr.responseType = 'blob'; //返回类型blob
xhr.onload = function (res) {
let blob = this.response;
let reader = new FileReader();
reader.readAsDataURL(blob)
reader.onload = function (e) {
//创建a标签 模拟点击事件下载文件流
const object = document.createElement('a');
//下载的pdf名称
object.download = '123.pdf';//文件名
object.href = e.target.result;
object.click();
}
}
xhr.send()
}