我正在将使用AWS S3 SDK v2的库转换为v3。
我的库是另一个库的接口的实现。另一个库提供了抽象文件存储的接口(例如在本地文件系统或云中具有存储)。
目前我有这个功能(v2 SDK):
public async getFileStream(filename: string): Promise<Readable> {
return this.s3.getObject({
Bucket: this.bucket,
Key: filename,
})
.createReadStream();
}
新的v3 SDK不再有createReadStream
。我已经检查了互联网上的各种网站,他们都建议使用.Body.transformToWebStream().pipe
。我不能这样做,因为我需要返回一个Readable
。
我试着这样做(v3 SDK):
import { Readable } from 'node:stream';
public async getFileStream(filename: string): Promise<Readable> {
return Readable.fromWeb(
(await this.s3.getObject({
Bucket: this.bucket,
Key: filename,
})
).Body.transformToWebStream()
);
}
我得到以下错误:
Argument of type 'ReadableStream<any>' is not assignable to parameter of type 'import("stream/web").ReadableStream<any>'.
Type 'ReadableStream<any>' is missing the following properties from type 'ReadableStream<any>': values, [Symbol.asyncIterator]ts(2345)
看起来本机节点ReadableStream<any>
和S3的ReadableStream<any>
并不相同。
那么,如何使用新的AWS S3 v3 SDK获取Readable
?
1条答案
按热度按时间r6hnlfcb1#
请尝试删除Readable.fromWeb()和transformToWebStream()。如果我理解正确的话,这两个方法将Readable(这正是您所需要的)转换为ReadableStream并恢复它,最终删除了一些属性。对于transformToWebString(),需要调用pipeTo/pipeThrough而不是pipe。如果你不明白其中的区别,就用pipeThrough