如何通过管道传输 s3 getSignedUrl
How to pipe a s3 getSignedUrl
我正在尝试传输已签名的 url 我存储在 S3 存储桶中的图像。
当使用常规的“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 实现?
找到解决办法了!受这个答案 的启发,我们想要做的是:
- 获取要搜索的项目的键。
- 将其与参数一起传递给 getSignedUrlPromises。
- 从承诺中获取生成的url。
- 从 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);
});
});
如果您找到更好的方法,请告诉我!
我正在尝试传输已签名的 url 我存储在 S3 存储桶中的图像。
当使用常规的“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 实现?
找到解决办法了!受这个答案
- 获取要搜索的项目的键。
- 将其与参数一起传递给 getSignedUrlPromises。
- 从承诺中获取生成的url。
- 从 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);
});
});
如果您找到更好的方法,请告诉我!