如何通过管道发送s3 getSignedUrl



我正试图通过管道传输S3中存储在bucket中的图像的签名url。

当使用常规的";getObject"方法我可以像这个一样

app.get("/images/:key", (req, res) => {
const key = req.params.key;
const downloadParams = {
Key: key,
Bucket: bucketName,
};
const readStream = s3.getObject(downloadParams).createReadStream();
readStream.pipe(res);
});

但是当我尝试使用getSignedUrlPromise时,我不能使用createReadStream方法,因为它说它不是一个函数。

const readStreamSigned = await s3
.getSignedUrlPromise("getObject", downloadParams).createdReadStream // throws createReadStream is not a function
readStreamSigned.pipe(res)

如何使用getSignedUrl或getSignedUrlPromise实现这一点?

找到了解决方案!受到这个答案的启发https://stackoverflow.com/a/65976684/4179240在高层,我们想做的是:

  1. 获取要搜索的项目的密钥
  2. 将其与params一起传递给getSignedUrlPromises
  3. 从promise中获取生成的url
  4. 通过管道从get((的回调中获取结果

我最后就这样做了

app.get("/images/:key", async (req, res) => {
const key = req.params.key;
const downloadParams = {
Key: key,
Bucket: bucketName,
};
const url = await s3.getSignedUrlPromise("getObject", downloadParams);
https.get(readStream, (stream) => {
stream.pipe(res);
});
});

如果你找到更好的方法,请告诉我!😃

最新更新