使用AWS SDK (S3. putobject)上传可读流到S3 (node.js)



我的目标是上传一个Readable流到S3

问题是AWS api似乎只接受ReadStream作为流参数。

例如,下面的代码片段可以正常工作:

const readStream = fs.createReadStream("./file.txt") // a ReadStream
await s3.putObject({
Bucket: this.bucket,
Key: this.key,
Body: readStream,
ACL: "bucket-owner-full-control"
}

当我尝试用Readable(ReadStream扩展stream.Readable)做同样的事情时,问题开始了。

下面的代码段失败

const { Readable } = require("stream")
const readable = Readable.from("data data data data") // a Readable
await s3.putObject({
Bucket: this.bucket,
Key: this.key,
Body: readable,
ACL: "bucket-owner-full-control"
}
我从AWS sdk得到的错误是:NotImplemented: A header you provided implies functionality that is not implemented

***请注意,我更喜欢Readable而不是ReadStream,因为我想允许传递不一定来自文件的流-例如内存中的字符串。因此,一个可能的解决方案是将Readable转换为Readstream以使用SDK。

任何帮助将非常感激!

考虑到Readable不再是一个文件,有元数据,如MIME类型和内容长度,你需要更新你的putObject,以包括这些值:

const { Readable } = require("stream")
const readable = Readable.from("data data data data") // a Readable
await s3.putObject({
Bucket: this.bucket,
Key: this.key,
Body: readable,
ACL: "bucket-owner-full-control",
ContentType: "text/plain",
ContentLength: 42 // calculate length of buffer
}

希望这对你有帮助!

最新更新