vault backup: 2023-12-28 14:18:55
This commit is contained in:
parent
b60465bf2e
commit
55bfa01173
45
07-Other/Node.js/在Nodejs中使用Axios下载文件的方法.md
Normal file
45
07-Other/Node.js/在Nodejs中使用Axios下载文件的方法.md
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
# 参考
|
||||||
|
- https://blog.csdn.net/clearlxj/article/details/108264141
|
||||||
|
|
||||||
|
>查看源码发现axios返回的内容默认是Stream格式的;
|
||||||
|
如果没有设置responseType的话,返回内容将会从Stream转为Buffer再转为String;
|
||||||
|
如果responseType为stream的话不进行转换;
|
||||||
|
如果responseType为arraybuffer的话将Stream转为Buffer;
|
||||||
|
但是如果想把Buffer转为String再转回Buffer的话将会出问题(默认使用utf8进行Buffer的编码和解码),有的文件这样是可以的,但是Excel文件这样做的话两次Buffer的值是不同的;但是转为base64的话是都可以的。
|
||||||
|
|
||||||
|
|
||||||
|
# 设置responseType为stream
|
||||||
|
```js
|
||||||
|
const result = await require('axios')({ url, method, data, responseType: 'stream' });
|
||||||
|
result.data.pipe(require('fs').createWriteStream(saveFilePath));
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
提供buffer转Stream并保存为文件的方法
|
||||||
|
```js
|
||||||
|
function bufferToStream(bufferData, saveFilePath) {
|
||||||
|
return new Promise((res, rej) => {
|
||||||
|
const bufferStream = new stream.PassThrough();
|
||||||
|
bufferStream.end(bufferData);
|
||||||
|
const ws = fs.createWriteStream(saveFilePath);
|
||||||
|
bufferStream.pipe(ws).on('finish', () => {
|
||||||
|
res(saveFilePath);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
# 设置responseType为arraybuffer
|
||||||
|
```js
|
||||||
|
const result = await require('axios')({ url, method, data, responseType: 'arraybuffer' });
|
||||||
|
const bufferData = result.data;
|
||||||
|
await bufferToStream(bufferData, saveFilePath);
|
||||||
|
```
|
||||||
|
|
||||||
|
# 不设置responseType,设置responseEncoding为base64
|
||||||
|
```js
|
||||||
|
const result = await require('axios')({ url, method, data, responseEncoding: 'base64' });
|
||||||
|
const bufferData = Buffer.from(result.data, 'base64');
|
||||||
|
await bufferToStream(bufferData, saveFilePath);
|
||||||
|
```
|
Loading…
x
Reference in New Issue
Block a user