使用fetch+streamsaver对文件进行导出
文章目录
- 使用fetch+streamsaver对文件进行导出
- 前言
- 一、streamsaver是什么?
- 二、使用步骤
- 1.下载依赖包
- 2.创建downloadTxt.js文件
- 3.再组件中使用
- 总结
前言
一开始使用a标签来下载.xlsx文件,没有发现什么问题。方法如下
const elink = document.createElement("a");
elink.style.display = "none";
elink.target = "_blank";
elink.href = "文件地址";
document.body.appendChild(elink);
elink.click();
document.body.removeChild(elink);
但是使用这种方式下载txt文件会在浏览器直接打开,不触发下载的功能。
一、streamsaver是什么?
StreamSaver.js采用直接创建一个可写流到文件系统的方法。而不是将数据保存在客户端存储或内存中。
二、使用步骤
1.下载依赖包
代码如下(示例):npm install streamsaver --save
npm install streamsaver --save
2.创建downloadTxt.js文件
在utils文件瞎新建文件downloadTxt.js
import streamSaver from "streamsaver"
export const downloadFile = (data, filename) => {
return fetch(data).then(res => {
// 创建写入流 filename为下载的文件名
const fileStream = streamSaver.createWriteStream(filename, {
size: res.headers.get("content-length")
})
const readableStream = res.body;
if (window.WritableStream && readableStream.pipeTo) {
return readableStream.pipeTo(fileStream).then(() => {
})
}
window.writer = fileStream.getWriter();
const reader = res.body.getReader();
const pump = () => reader.read().then(res => res.done ?
window.writer.close() : window.writer.write(res.value).then(pump))
pump();
})
}
3.再组件中使用
import { downloadFile } from '../../utils/downloadTxt.js';
methods: {
downloadFileFunction() {
const url = "后端返回的文件地址";
const name = "下载的文件.txt";
downloadFile(url, name);
}
}
总结
使用fetch+streamsaver对文件进行导出
文章目录
- 使用fetch+streamsaver对文件进行导出
- 前言
- 一、streamsaver是什么?
- 二、使用步骤
- 1.下载依赖包
- 2.创建downloadTxt.js文件
- 3.再组件中使用
- 总结
前言
一开始使用a标签来下载.xlsx文件,没有发现什么问题。方法如下
const elink = document.createElement("a");
elink.style.display = "none";
elink.target = "_blank";
elink.href = "文件地址";
document.body.appendChild(elink);
elink.click();
document.body.removeChild(elink);
但是使用这种方式下载txt文件会在浏览器直接打开,不触发下载的功能。
一、streamsaver是什么?
StreamSaver.js采用直接创建一个可写流到文件系统的方法。而不是将数据保存在客户端存储或内存中。
二、使用步骤
1.下载依赖包
代码如下(示例):npm install streamsaver --save
npm install streamsaver --save
2.创建downloadTxt.js文件
在utils文件瞎新建文件downloadTxt.js
import streamSaver from "streamsaver"
export const downloadFile = (data, filename) => {
return fetch(data).then(res => {
// 创建写入流 filename为下载的文件名
const fileStream = streamSaver.createWriteStream(filename, {
size: res.headers.get("content-length")
})
const readableStream = res.body;
if (window.WritableStream && readableStream.pipeTo) {
return readableStream.pipeTo(fileStream).then(() => {
})
}
window.writer = fileStream.getWriter();
const reader = res.body.getReader();
const pump = () => reader.read().then(res => res.done ?
window.writer.close() : window.writer.write(res.value).then(pump))
pump();
})
}
3.再组件中使用
import { downloadFile } from '../../utils/downloadTxt.js';
methods: {
downloadFileFunction() {
const url = "后端返回的文件地址";
const name = "下载的文件.txt";
downloadFile(url, name);
}
}