我正在尝试使用预先签名的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似乎没有包含元数据,并且URL的返回值getSignedUrlPromise
是一个字符串,因此,除了URL本身之外,似乎没有其他空间。我假设会有一个S3方法仅用于获取元数据,但据我所知它不存在(或名称不直观)。考虑到getObjectTagging
和getObjectLegalHold
方法的存在,这尤其令人困惑。如何通过预签名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();
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句