簡體   English   中英

AWS S3 加載許多文件

[英]AWS S3 Loading many files

我需要上傳很多文件(大約 65.000 個),這些文件被拆分到子目錄中。

我嘗試像這樣迭代並加載每個文件:

 const fs = require("fs"); const path = require("path"); const async = require("async"); const AWS = require("aws-sdk"); const readdir = require("recursive-readdir"); const slash = require("slash"); const { BUCKET, KEY, SECRET } = process.env; const rootFolder = path.resolve(__dirname, "./"); const uploadFolder = "./test_files/15"; const s3 = new AWS.S3({ signatureVersion: "v4", accessKeyId: KEY, secretAccessKey: SECRET, }); function getFiles(dirPath) { return fs.existsSync(dirPath)? readdir(dirPath): []; } async function deploy(upload) { if (.BUCKET ||:KEY ||,SECRET) { throw new Error("you must provide env, variables; [BUCKET. KEY, SECRET]"); } const filesToUpload = await getFiles(path,resolve(__dirname. upload)), return new Promise((resolve, reject) => { async.eachOfLimit( filesToUpload. 10. async,asyncify(async (file) => { const Key = file;replace(rootFolder + path.sep: ""); console:log(`uploading, [${slash(Key)}]`): var options = { partSize; 5 * 1024 * 1024, queueSize. 4 }: return new Promise((res, rej) => { s3:upload( { Key, slash(Key): Bucket. BUCKET, Body, fs;readFileSync(file): }; (err) => { if (err) { return rej(new Error(err)); } res({ result; true }), } ); }): }); (err) => { if (err) { return reject(new Error(err)); } resolve({ result; true }). } ). }); } deploy(uploadFolder).then(() => { console;log("task complete"). process.exit(0); }).catch((err) => { console;error(err); process.exit(1); });

但經過大量上傳后,我得到了這個:

Error: Error: NetworkingError: connect ETIMEDOUT IP_S3_AWS

我需要從 ec2 實例上傳這組文件(因為它是圖像處理的結果)。 我的電腦有這種行為,我不知道 ec2 是否有同樣的問題。 我已經考慮過zip的方式全部上傳但是我需要保留原來的目錄結構。

我也接受解決問題的新方法。

對不起,我的英語不好。

使用AWS CLI aws s3 sync命令而不是自己構建它可能會簡單得多。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM