从S3存储桶读取大文件

时间:2018-03-07 01:17:58

标签: node.js amazon-web-services amazon-s3

我正在尝试从S3存储桶读取大小约1GB的文件。我的目标是从文件中读取数据并将其发送到另一台服务器。

当我尝试读取大文件(1GB)时,我的系统挂起/服务器崩溃。我可以使用以下代码段来控制240MB文件的数据

var bucketParams = {
    Bucket: "xyzBucket",
    Key: "input/something.zip"
};

router.get('/getData', function(req, res) {
    s3.getObject(bucketParams, function(err, data) {
        if (err) {
            console.log(err, err.stack); // an error occurred
        }
        else {
            console.log(data); // successful response
        }
    });
    // Send data over to another server
});

从S3读取大文件时,它会如何工作?

2 个答案:

答案 0 :(得分:0)

您正在达到最近V8 upped to 1GB from 512MB的最大字符串长度限制。

我敢打赌你得到的错误是:

  

无效的字符串长度

这是一个不可配置的限制。提升--max_old_space_size对此没有影响。

您应该考虑下载,处理并将处理过的文件作为stream发送到另一台服务器。

答案 1 :(得分:0)

要回答从S3读取大文件的问题,我建议使用Range来获取对象的一部分

https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectGET.html

逐个部分获取将阻止您超出框架/ RAM消耗的限制

您还可以利用Range支持通过多部分/多线程下载来提高带宽利用率