使用 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"
}
当我尝试对 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
}
希望对您有所帮助!
我的目标是将 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
}
希望对您有所帮助!