简介:
springboot+vue实现文件下载,网上很多教程都是通过处理返回的文件流,判断文件类型,指定下载,而且很多博文都是以导出数据为例子在演示,这种方式通用性太差,其实我们先来回想一下在普通web项目时我们实现文件下载的方式:
首先:后台将文件以流的形式输出,前台然后直接访问这个链接就实现了下载,
但是在前后端分离的情况下,我们直接a标签访问出现跨域,所以可以通过如下形式模拟a标签来处理;
download(id,name) {
download(id).then(response => {
try {
const blobUrl = window.URL.createObjectURL(response )
const a = document.createElement('a')
a.style.display = 'none'
a.download = name
a.href = blobUrl
a.click()
} catch (e) {
alert('保存文件出错')
}
})
},
其中response 是我们后台接口返回的文件流,我们只需要创建一个a标签,将文件流放入href中,这样点击就轻松实现了下载任意文件。
后台参考代码(网上copy的)
File file = new File("D://xxx.txt"); response.setCharacterEncoding("utf-8"); response.setContentType("application/octet-stream"); response.setHeader("Content-Disposition","attachment;fileName=xxx.txt"); FileInputStream fileInputStream = new FileInputStream(file); byte[] b = new byte[1024]; int length; while ((length = fileInputStream.read(b)) > 0) { response.getOutputStream().write(b, 0, length); }