如何读取大文件并将其上传到 s3?

Posted

技术标签:

【中文标题】如何读取大文件并将其上传到 s3?【英文标题】:How do I read and upload a large file to 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 字段中。

如何处理大型对象?

【问题讨论】:

【参考方案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()) 的东西还是有效的。

以上是关于如何读取大文件并将其上传到 s3?的主要内容,如果未能解决你的问题,请参考以下文章

使用 go 将流文件上传到 AWS S3

Nginx PHP 上传大文件失败(超过 6 GB)

将大文件写入 S3 的最佳方法是啥?

Azure函数通过http触发请求分块读取大文件

将文件上传并压缩到s3

如何在python中读取一个大的tsv文件并将其转换为csv