我使用node.js和aws(用于S3).当我从s3下载一个巨大的文件时,我如何能够定期地检索下载的进度,以便前端可以显示一个进度条?目前我正在使用getObject。(https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#getObject-property)
下载该文件的代码可以工作。这是我的代码片段..。
return await new Promise((resolve, reject) => {
this.s3.getObject(params, (error, data) => {
if (error) {
reject(error);
} else {
resolve(data.Body);
}
});我只是不知道如何在下载过程中与进度挂钩。提前感谢您的洞察力!
发布于 2022-01-31 15:52:39
您可以利用S3 byte-range fetching,它允许在S3中获取文件的小部分。然后,这种功能允许我们通过将文件下载分成多个部分来获取大型对象,这带来了以下优点:
您可以根据选择的大小将文件下载拆分(我建议一次下载1-4mb ),然后逐块下载部分,当每个get对象承诺完成时,您可以跟踪已经完成的部分。一个好的开始是通过查看AWS文件。
发布于 2022-03-17 23:05:45
流选项
另一个选项是使用流并跟踪接收到的字节数:
const { ContentLength: contentLength } = await s3.headObject(params).promise();
const rs = s3.getObject(s3Params).createReadStream();
let progress = 0;
rs.on('data', function (chunk) {
// Advance your progress by chunk.length
progress += chunk.length;
console.log(`Progress: ${progress / contentLength}%`);
});
// ... pipe to write streamhttps://stackoverflow.com/questions/70928828
复制相似问题