2016-07-22 46 views
0

我需要使用aws-sdk-js从S3存储桶下载一些大型图像集。截至目前,我通过拨打s3.getObject(params, function (err, data)来做到这一点。在我的列表中的每个文件的循环中?除了在aws-sdk-js中逐一下载文件之外,还有其他更快更有效的方法来下载文件吗?JavaScript的aws-sdk是否支持S3的多部分“下载”?

回答

1

基本上你将要同步的S3存储目录

你能如果你想使用AWS-SDK-JS没有同步使用来自AWS CLI aws s3 syncs3cmd put --recursive从s3cmd CLI

方法从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存储下载一些选定的一组文件的基础上,通过一个Web应用程序给用户输入。截至目前,我正在考虑使用lambda函数的选项,该函数从s3存储区返回预先签名​​的一组URL,而不是直接从Web应用程序获取文件,这是由于一些安全问题。顺便说一句希望你可以使用你给出的代码片段从s3下载数据呢? –

+0

是的,你可以使用剪切下载,只需将'uploadDir'更改为'downloadDir' –

1

可以使用节点JS s3fs模块,其提供类似于给FS模块的功能。要下载多个文件,我建议您使用简单易用的s3fs模块。您可以使用s3fs写您的文件在您的S3存储桶的目录,然后使用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

相关问题