首页 > 解决方案 > 如何在上传多个文件时减少上传时间

问题描述

我有一个目录,其中包含最小范围从 2000 个文件到 10000 个文件的小文件。

目前在 aws-sdk-js 中没有直接将文件夹上传到 s3 的方法。

我需要递归遍历文件夹内的文件并将其上传到 s3。

我使用了这行代码。

const PARALLEL_UPLOADS = 10;
const q = async.queue((task, callback) => {
  s3.upload({
  Bucket: 'xxx',
  Key: task.name,
  Body: fs.createReadStream(task.path)
 }, callback)
}, PARALLEL_UPLOADS);

q.drain = function() {
  console.log('all items have been processed');
};

我使用 walk npm 包递归读取文件夹内的文件。在里面我将文件推送到队列中。

  let walker = walk.walk(path);
  walker.on("file", async function(root, stat, next) {
  q.push({
     name: stat.name,
     path: root + "/" + stat.name,
 }) })

我测试了大小为 108 MB 的文件夹,但它在其中的嵌套文件夹中有 2700 个文件。

上传时间超过 45 分钟。

那么如何减少上传时间???提前致谢。

标签: javascriptnode.jsamazon-s3electronaws-sdk

解决方案


推荐阅读