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

Using AWS SDK (S3.putObject) to upload a Readable stream to 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"
}

当我尝试对 ReadableReadStream 扩展 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
}

希望对您有所帮助!