【问题标题】:How do I read and upload a large file to s3?如何读取大文件并将其上传到 s3?
【发布时间】:2015-06-24 21:27:16
【问题描述】:

我正在使用 Node.js .10.22 和 q-fs

我正在尝试将对象上传到 S3,一旦对象超过一定的 MB 大小,它就会停止工作。

除了占用我机器上的所有内存之外,它还给我这个错误

RangeError: length > kMaxLength
at new Buffer (buffer.js:194:21)

当我尝试在文件上使用fs.read 时。

正常情况下,当这有效时,我会使用s3.upload,并将缓冲区放入Body 字段中。

如何处理大型对象?

【问题讨论】:

    标签: node.js amazon-s3 fs


    【解决方案1】:

    您需要使用 API 的流式传输版本将您的可读文件系统流直接通过管道传输到您正在使用的 s3 模块提供的 S3 上传 http 请求正文流。这是直接来自aws-sdk documentation的示例

    var fs = require('fs');
    
    var body = fs.createReadStream('bigfile');
    var s3obj = new AWS.S3({params: {Bucket: 'myBucket', Key: 'myKey'}});
    s3obj.upload({Body: body}).
      on('httpUploadProgress', function(evt) { console.log(evt); }).
      send(function(err, data) { console.log(err, data) });
    

    【讨论】:

    • 我正在处理视频文件。这样做会损坏我的视频并且无法播放。
    • 但是如果我想再次使用该文件,也许我只需要解压缩它?尽管如此,删除 .pipe(zlib.createGzip()) 的东西还是有效的。
    猜你喜欢
    • 2017-12-12
    • 2021-12-07
    • 2017-06-13
    • 1970-01-01
    • 2016-04-12
    • 1970-01-01
    • 1970-01-01
    • 2022-10-20
    • 2012-07-31
    相关资源
    最近更新 更多