gpt4 book ai didi

javascript - AWS SDK JS S3 getObject 流元数据

转载 作者:行者123 更新时间:2023-11-30 19:50:37 27 4
gpt4 key购买 nike

我有类似于以下的代码,使用 Express 将 S3 对象作为响应通过管道传回客户端,效果很好。

const s3 = new AWS.S3();
const params = {
Bucket: 'myBucket',
Key: 'myImageFile.jpg'
};
s3.getObject(params).createReadStream().pipe(res);

问题是,我希望能够访问从 S3 返回的响应中的一些属性,例如 LastModifiedContentLengthETag 等等。我想使用这些属性在响应中作为 header 发送给客户端,以及记录信息。

由于它正在创建流,所以我不知道如何获取这些属性。

我考虑过单独调用 s3.headObject 来获取我需要的数据,但这似乎很浪费,而且最终会大规模增加大量成本。

我也考虑过放弃整个流的想法,只让它返回一个缓冲区,但同样,当我不需要它时使用额外的内存似乎真的很浪费,而且可能会增加更多的成本,因为处理请求所需的额外服务器以及处理每个请求所需的额外内存。


如何使用 s3.getObject 返回流以及 s3.getObject 通常返回给您的所有元数据和其他属性?


像下面这样的东西会很棒:

const s3 = new AWS.S3();
const params = {
Bucket: 'myBucket',
Key: 'myImageFile.jpg',
ReturnType: 'stream'
};
const s3Response = await s3.getObject(params).promise();
s3Response.Body.pipe(res); // where `s3Response.Body` is a stream
res.set("ETag", s3Response.ETag);
res.set("Content-Type", s3Response.ContentType);
console.log("Metadata: ", s3Response.Metadata);

但根据 S3 文档,这看起来不太可能。有没有其他方法可以实现类似的目标?

最佳答案

我发现并测试了以下内容。有用。

根据:Getting s3 object metadata then creating stream

function downloadfile (key,res) {

let stream;

const params = { Bucket: 'xxxxxx', Key: key }
const request = s3.getObject(params);


request.on('httpHeaders', (statusCode, httpHeaders) => {
console.log(httpHeaders);
stream.pipe(res)
stream.on('end', () => {
console.log('were done')
})
})
stream = request.createReadStream()

关于javascript - AWS SDK JS S3 getObject 流元数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54506495/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com