我有一个包含小文件的目录,最小范围从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分钟。
那么如何减少上传时间呢?谢谢。