Nodejs electron axios 下载 docx 文件,通过流的形式来写入文件很慢
Nodejs electron axios 下载 docx 文件,通过流的形式来写入文件很慢
直接通过 node download.js 使用 axios 并通过 res.data.pipe(fileStream)来写入很快; 但是在 electron 中的主进程里同样的代码这样写写入会很慢,而且几 m 的东西写入 80%就会直接断开了 http 请求,触发 stream 中的 finish 事件,但是文件还有 20%没有写进去,这是为啥呢?
4 回复
写入 80% 就断开请求,是不是请求超时了?后端会对一个连接的时间进行设置,我记得 IIS 和 Nginx 好像默认是几分钟来着。
嗯,但是 electron 里写入文件很慢,搞不懂为什么?导致请求报 net::ERR_CONNECTION_RESET
net::ERR_CONNECTION_RESET 还是你网络的问题 和 electron 没关系
在Node.js中使用Electron和Axios下载docx文件时,如果通过流的形式写入文件感觉速度较慢,可能是由多种原因引起的,比如网络速度、服务器响应、文件大小等。不过,可以通过优化代码来提升效率。以下是一个使用Axios以流的形式下载并保存docx文件的示例代码,同时包括了一些可能的优化措施:
const axios = require('axios');
const fs = require('fs');
const path = require('path');
async function downloadFile(url, outputPath) {
const writer = fs.createWriteStream(outputPath);
try {
const response = await axios({
url,
method: 'GET',
responseType: 'stream',
});
response.data.pipe(writer);
return new Promise((resolve, reject) => {
writer.on('finish', resolve);
writer.on('error', reject);
});
} catch (error) {
console.error('Error downloading file:', error);
throw error;
}
}
const fileUrl = 'https://example.com/file.docx';
const outputFilePath = path.join(__dirname, 'file.docx');
downloadFile(fileUrl, outputFilePath).then(() => {
console.log('File downloaded successfully');
}).catch(error => {
console.error('Failed to download file:', error);
});
优化建议
- 增加并发下载:如果可能,可以尝试分片下载并合并文件。
- 调整缓冲区大小:调整
fs.createWriteStream
的缓冲区大小可能有助于性能提升。 - 网络优化:确保网络连接稳定,考虑使用CDN加速下载。
如果上述方法仍然不能满足需求,建议进一步分析网络瓶颈或考虑使用其他下载工具。