【发布时间】:2020-01-03 06:34:51
【问题描述】:
我正在尝试使用预签名 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,生成如下:
const url = await s3.getSignedUrlPromise('getObject', {
Bucket: UPLOAD_BUCKET,
Key: key,
Expires: AWS_DOWNLOAD_EXPIRATION / 1000,
});
这个 URL 似乎不包含元数据,getSignedUrlPromise 的返回值是一个字符串,所以除了 URL 本身之外似乎没有任何空间。我假设会有一个 S3 方法来获取元数据,但据我所知它不存在(或者有一个不直观的名称)。考虑到存在 getObjectTagging 和 getObjectLegalHold 方法,这尤其令人困惑。如何通过预签名 URL 访问元数据?如果这不可能,我如何使用 AWS 开发工具包获取元数据?如果这不可能,那我一定是误解了元数据的意义。
【问题讨论】:
标签: node.js amazon-web-services amazon-s3