vue 返回文件流如何下载
时间: 2023-09-10 14:10:50 浏览: 92
可以使用浏览器的原生下载功能来实现文件流的下载,具体步骤如下:
1. 在后端根据需要下载的文件生成文件流,并设置响应头,使其以流的形式返回给前端。
```
// Node.js 代码示例
const fs = require('fs')
const path = require('path')
const filePath = path.resolve(__dirname, './test.pdf')
// 返回文件流
const stream = fs.createReadStream(filePath)
res.setHeader('Content-Type', 'application/octet-stream')
res.setHeader('Content-Disposition', 'attachment; filename=test.pdf')
stream.pipe(res)
```
2. 在前端使用`window.URL.createObjectURL`方法将文件流转换为 Blob 对象,并创建一个下载链接。
```
// Vue.js 代码示例
downloadFile() {
axios({
url: '/download',
method: 'get',
responseType: 'blob'
}).then(response => {
const blob = new Blob([response.data], { type: 'application/octet-stream' })
const url = window.URL.createObjectURL(blob)
const link = document.createElement('a')
link.href = url
link.setAttribute('download', 'test.pdf')
document.body.appendChild(link)
link.click()
document.body.removeChild(link)
})
}
```
3. 点击下载链接,浏览器会弹出文件下载对话框,用户选择保存文件的位置即可完成文件下载。
需要注意的是,由于 Blob 对象占用内存较大,如果需要下载的文件较大或同时下载多个文件时,可能会导致浏览器卡顿或崩溃。为了避免这种情况,可以考虑使用服务端直接返回文件下载链接,而不是文件流。
阅读全文