2016-07-22 5 views
0

Мне нужно загрузить большой набор изображений из ведра S3 с помощью aws-sdk-js. На данный момент я делаю это, вызывая s3.getObject(params, function (err, data). в цикле для каждого файла в моем списке? Есть ли какой-нибудь другой более быстрый и эффективный способ загрузки файлов, кроме загрузки их один за другим в aws-sdk-js?Использует ли aws-sdk для javascript многократные «загрузки» с S3?

ответ

1

В основном вы хотите синхронизировать каталог на s3 ведро

можно использовать aws s3 sync из CLI AWS или s3cmd put --recursive из s3cmd CLI

Если вы хотите использовать AWS-СДК-Js нет никакой синхронизации метод из API, к счастью, многие из них сделали эту функциональность.

, например, node-s3-client имеет такие функциональные возможности

var params = { 
    localDir: "some/local/dir", 
    deleteRemoved: true, // default false, whether to remove s3 objects 
         // that have no corresponding local file. 

    s3Params: { 
    Bucket: "s3 bucket name", 
    Prefix: "some/remote/dir/", 
    // other options supported by putObject, except Body and ContentLength. 
    // See: http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#putObject-property 
    }, 
}; 
var uploader = client.uploadDir(params); 
uploader.on('error', function(err) { 
    console.error("unable to sync:", err.stack); 
}); 
uploader.on('progress', function() { 
    console.log("progress", uploader.progressAmount, uploader.progressTotal); 
}); 
uploader.on('end', function() { 
    console.log("done uploading"); 
}); 
+0

Спасибо, я действительно хотел, чтобы загрузить некоторые выбранный набор файлов из s3 ведра, на основе пользовательского ввода заданного с помощью веб-приложения. На данный момент я рассматриваю возможность использования функции лямбда, которая возвращает предварительно подписанный набор URL-адресов из ведра s3, вместо того, чтобы получать файлы, загружаемые непосредственно из веб-приложения, из-за некоторых проблем безопасности. Btw Hope Возможно использовать фрагмент кода, который вы указали для загрузки данных из s3? –

+0

да вы можете использовать отрезанный для загрузки, просто измените 'uploadDir' на' downloadDir' –

1

Вы можете использовать модуль Узлом JS s3fs, который обеспечивает функции, которые аналогичны модулю фс. Чтобы загрузить несколько файлов, я рекомендую вам использовать модуль s3fs, который прост и прост в использовании. Вы можете написать свои файлы в каталоге на s3 ведро с помощью s3fs, а затем использовать функцию readdirp:

var fsImpl = new S3FS('test-bucket', options); 
    fsImpl.readdirp('test-folder').then(function(files) { 
     // Files contains a list of all of the files similar to [`fs.readdir(path, callback)`](http://nodejs.org/api/fs.html#fs_fs_readdir_path_callback) but with recursive contents 
    }, function(reason) { 
     // Something went wrong 
    }); 

Источник: https://www.npmjs.com/package/s3fs

Чтобы настроить s3fs проверить ссылку ниже, это довольно простой в использовании :

https://www.npmjs.com/package/s3fs

Смежные вопросы