node.js - Node AWS S3获取对象元数据?

标签 node.js amazon-web-services amazon-s3

我正在尝试使用预签名 URL 将用户上传的文件存储在 S3 中。这工作正常,但我使用 UUID 作为文件名以避免冲突。我需要能够保存文件的原始文件名,因此我将其作为元数据传递到签名的上传 URL 中:

const url = await s3.getSignedUrlPromise('putObject', {
  Bucket: UPLOAD_BUCKET,
  Key: key,
  Expires: AWS_UPLOAD_EXPIRATION / 1000,
  ContentType: contentType,
  Metadata: {
    filename: originalFilename
  },
});

这似乎也工作正常(元数据显示在 AWS 控制台中)。我如何访问此元数据?当客户端需要显示这些图像之一时,它们会向服务器请求一个预先签名的下载 URL,该 URL 的生成如下:

const url = await s3.getSignedUrlPromise('getObject', {
  Bucket: UPLOAD_BUCKET,
  Key: key,
  Expires: AWS_DOWNLOAD_EXPIRATION / 1000,
});

此 URL 似乎不包含元数据,并且 getSignedUrlPromise 的返回值是一个字符串,因此除了 URL 本身之外,似乎没有任何空间容纳任何内容。我假设会有一个 S3 方法来仅获取元数据,但据我所知它不存在(或者有一个不直观的名称)。考虑到 getObjectTagginggetObjectLegalHold 方法的存在,这尤其令人困惑。如何通过预签名 URL 访问元数据?如果不可能,如何使用 AWS 开发工具包获取元数据?如果这是不可能的,我一定是误解了元数据的意义。

最佳答案

您无法使用 URL 获取元数据,但可以使用 s3.headObject 方法:

const config = new AWS.Config({
      accessKeyId: 'your acessKey',
      secretAccessKey: 'your secret',
      region: 'your region',
    });
const s3 = new AWS.S3(config);

const params = {
  Bucket: 'your bucket',
  Key: 'your assetKey'
}
const metaData = await s3.headObject(params).promise();

Documentation

关于node.js - Node AWS S3获取对象元数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59570777/

相关文章:

amazon-web-services - AWS-IAM 关于访问 key 的策略给出错误消息

android - 将图片从图库上传到 s3 存储桶 - 创建文件对象?

python - 将 Pandas 数据帧写入 s3 AWS 中的 Parquet

javascript - aws lambda拒绝文件上传

node.js - 将 Sockets.io 与 React.js + Hooks 结合使用; sockets.emit 不工作

amazon-web-services - 为什么 Chrome 如此讨厌自签名证书?

javascript - 如何在 javascript 函数对象中测试是否调用了无效方法?

amazon-web-services - 从 ftp ssl 到 Amazon S3

javascript - 如何在 Discord.js 中更改带有消息的用户的昵称?

node.js - Node.js 中超出了最大调用堆栈大小