因此,我基本上是试图使用axios从url下载一个图像,但是我得到了以下错误:
TypeError: streamResponse.data.pipe is not a function
我的图像下载功能如下(注意,这是在一个类中):
/**
* Download poster
*/
async downloadPoster() {
// Writer stream where we want to download the poster image
const writer = fs.createWriteStream(this.poster.file);
// This grabs the second part of the image url that we want
const resultsResponse = await axios({
url: this.poster.url,
method: 'GET',
responseType: 'json',
adapter: httpAdapter
});
// Zero results
if (resultsResponse.data.total_results <= 0) {
logger.log(language[Config.language].posterNotFound + this.movie.title, 'error');
return false;
}
// Create the poster download URL
var posterDownloadUrl = new URL(Config.api.posterUrl + resultsResponse.data.results[0].poster_path);
const streamResponse = await axios({
url: posterDownloadUrl,
method: 'GET',
responseType: 'stream',
adapter: xhrAdapter
});
// Write data
streamResponse.data.pipe(writer);
return new Promise((resolve, reject) => {
writer.on('finish', resolve);
writer.on('error', reject);
});
}
我假设流响应的适配器是xhr适配器。无论如何,我尝试过这两个适配器,并且都给出了完全相同的错误。但是这两个请求都会发生(我可以在devtools中看到它们)。
所以没有混淆,我在文件的顶部导入了适配器:
const httpAdapter = require('axios/lib/adapters/http');
const xhrAdapter = require('axios/lib/adapters/xhr');
我在这里做错了什么?
发布于 2021-01-07 14:49:14
通过将下载请求发送到主线程使其工作。不知道为什么,但似乎您无法从renderer.js
文件中的流中访问axios数据。不过,在看了一下这里之后,它现在开始工作了:
发布于 2021-01-07 02:35:29
下面是您代码的一个更简单的版本。
代码:
const downloadImage = async (url) => {
// Writer stream where we want to download the image
const writer = fs.createWriteStream("./image.png");
const streamResponse = await axios({
url,
method: 'GET',
// that the point!!!
// change responseType to stream
// pipe only work with 'stream'
responseType: 'stream'
});
// Write data
streamResponse.data.pipe(writer);
writer.on('finish', () => console.log("Finished"));
writer.on('error', () => console.error("Error while dowloading image"));
}
const imageLink = "https://upload.wikimedia.org/wikipedia/commons/thumb/b/b6/Image_created_with_a_mobile_phone.png/1200px-Image_created_with_a_mobile_phone.png";
downloadImage(imageLink);
发布于 2022-04-24 08:17:25
必须将AxiosRequestConfig而不是responseType
头添加为responseType
const response = await axios(`${url}/api/v1/rest/export`, {
method: 'POST',
responseType: 'stream',
headers: {
'Content-Type': 'application/json',
Authorization: authToken.includes('Bearer') ? authToken : `Bearer ${authToken}`,
},
data: query,
});
response.data.pipe(fs.createWriteStream('./export.csv'));
https://stackoverflow.com/questions/65602941
复制相似问题