node.js - 如何读取大文件并将其上传到 s3?

标签 node.js amazon-s3 fs

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

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

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

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

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

通常,当它起作用时,我会执行s3.upload,并将缓冲区放入Body字段中。

如何处理大型物体?

最佳答案

您需要使用 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) });

关于node.js - 如何读取大文件并将其上传到 s3?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29709182/

相关文章:

node.js - Nodejs检查给定的字符串是否是有效的文件系统路径而不实际检查文件系统

node.js - 在 Nodejs 中使用 gm 调整大小并合成两个或多个图像

Node.js - 使用多个流正确关闭 fd

linux - 作为 shell 脚本的一部分,sudo su 不起作用。有替代方案吗?

ios - 如何将图像从 AWS S3 加载到 UICollectionView 中?

javascript - Node.js 中找不到子目录中的文件

javascript - 括号中带有 "this.variable"的立即调用函数表达式

amazon-web-services - 限制对 AWS Lambda 函数的 S3 存储桶访问

javascript - 如何使用 Node.js 下载文件(不使用第三方库)?

javascript - 在 TypeScript 中声明 UInt8Array 变量