![](/img/trans.png)
[英]How do I update/define system metadata for an AWS S3 object while creating a presigned url using Node.js SDK
[英]Node AWS S3 get object metadata?
我正在嘗試使用預簽名 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 方法只獲取元數據,但據我所知它不存在(或名稱不直觀)。 考慮到存在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();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.