所以我基本上是在尝试使用node-fetch从一个网址下载一个压缩包,但是我得到了这个错误:TypeError: res.body.pipe is not a function
因为我已经将我的电子应用程序版本从"electron": "^8.2.3"更新到了"electron": "^11.0.1"
我的下载功能似乎不再工作了,我不能理解这个问题。因为我的应用是基于这个样板的,所以我在一个干净的electron-react-boilerplate上试了试,我也遇到了同样的错误。
我用来下载这个图片的函数如下:
import React from 'react';
import fetch from 'node-fetch';
import { createWriteStream } from 'fs';
const Hello = () => {
const onDownload = async () => {
const { url } = { url: 'https://file-examples-com.github.io/uploads/2017/02/zip_10MB.zip' };
try {
const res = await fetch(url);
const { status } = res;
if (status === 200) {
const fileStream = createWriteStream(
`./downloads/archive.zip`
);
res.body.pipe(fileStream);
} else {
console.log('error');
}
res.body.on('end', () => {
console.log('end');
});
} catch (error) {
console.log(error);
}
};
return (
<div>
<h1>electron-react-boilerplate</h1>
<div className="Hello">
<button type="button" onClick={() => onDownload()}>
Download
</button>
</div>
</div>
);
};同样的功能在旧的电子版本上也没有问题,我是不是遗漏了什么?
发布于 2021-08-30 10:47:50
我找到了一个解决方案,通过从node-fetch切换到axios。我认为其他任何人在未来都可能遇到这个问题,所以我将在这里分享我的解决方案:
try {
const res = await axios(url, {
headers: {
Authorization: `Bearer ${accessToken}`,
},
onDownloadProgress: (progressEvent) => {
const percentage = Math.round(
(progressEvent.loaded * 100) / progressEvent.total
);
dispatch(downloadProgress());
if (percentage === 100) {
dispatch(downloadEnd());
}
},
});
const { status } = res;
if (status === 200) {
const fileStream = await createFileStream(folderPath, id);
res.body.pipe(fileStream);
} else {
dispatch(downloadAccessError());
}
} catch (error) {
dispatch(downloadError());
}https://stackoverflow.com/questions/68913027
复制相似问题