我的目标是上传一个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
}
希望这对你有帮助!