1.后端代码(controller)
1.1 controller
@GetMapping("/downloadNodeDeployFile/{nodeId}")
public void downloadNodeDeployFile(@PathVariable("nodeId") String nodeId, HttpServletResponse response) {
nodeService.downloadNodeDeployFile(nodeId, response);
}
1.2 serviceImpl
public void downloadNodeDeployFile(String nodeId, HttpServletResponse response) {
InputStream deployInputStream = null;
ServletOutputStream outputStream = null;
byte[] buf = new byte[1024 * 5];
try {
deployInputStream = resourceLoader.getClassLoader().getResourceAsStream("filePath");
outputStream = response.getOutputStream();
while (deployInputStream.read(buf) > 0) {
String s = new String(buf);
if (s.contains("test")) {
s = s.replace("test", "testtest");
}
s=s.trim();
log.info("修改的文件为:\n {}", s);
outputStream.write(s.getBytes(), 0, s.length());
}
outputStream.flush();
} catch (IOException io) {
log.error("部署文件流传输出错", io);
} finally {
try {
outputStream.close();
deployInputStream.close();
} catch (Exception e) {
log.error("流关闭时出错", e);
}
}
}
2.前端代码(vue3)
const handleDownload = (activation, nodeId) => {
axios.get(`your url`,{
responseType: 'blob',
headers: {
Authorization: store.getters['user/accessToken'],
},
},).then((res)=>{
console.log(res)
const link=document.createElement('a');
try {
let blob = new Blob([res.data],{type: "application/octet-stream"});
console.log(blob);
let _fileName = res.headers['content-disposition'].split(';')[1].split('=')[1];
link.style.display='none';
const url = window.URL || window.webkitURL || window.moxURL;
link.href=url.createObjectURL(blob);
link.setAttribute('download', _fileName.substring(_fileName.lastIndexOf('_')+1));
document.body.appendChild(link);
link.click();
document.body.removeChild(link);
url.revokeObjectURL(link.href);
}catch (e) {
console.log('下载的文件出错',e)
}
}).catch(()=>{
})
};
3.知识点
3.1 vue中的Bolb
Blob讲解,点此查看