2
如果我在s3上有文件,我該如何更改該文件的元數據?在s3文件上更改標題
它看起來像我可以「複製」到相同的位置與新的標題,這實際上是相同的事情。
我使用knox作爲節點客戶端來執行此操作。有問題的文件已將Content-Type
標頭設置爲video/mp4
,但我想將其更改爲application/octet-stream
。原因是這個鏈接會觸發瀏覽器下載資源,而不是在瀏覽器窗口中顯示它。
鏈接knox source此功能
var filename = "/example/file.mp4",
headers = {'Content-Type': "application/octet-stream"};
client.copyFile(filename, filename, headers, function(error, resp) {
//response is successful
});
的反應是成功的,但是當我在S3重新加載資源我看不到頭已經改變。
我可以看到底層的API調用是這樣的:
'PUT /example/file.mp4 HTTP/1.1\r\nContent-Type: application/octet-stream
x-amz-copy-source: /bucket/example/file.mp4
Content-Length: 0\r\nDate: Thu, 28 Jan 2016 21:13:12 GMT
Host: cc-video-archives-dev.s3.amazonaws.com
Authorization: <redacted>=\r\nConnection: close\r\n\r\n',
API調用看起來正確...複製對象本身確實是如何修改元數據的......但是你沒有'Cache-Control'頭文件,所以你可能會看到一個緩存的響應。或者您可能會在S3中看到一致性問題 - 新創建的對象將立即可用;即使通常幾乎立即(儘管並非總是),覆蓋和刪除也不能保證。檢查S3控制檯中的對象元數據? –
啊,有趣。所以我登錄到S3控制檯來檢查元數據,它沒有改變,仍然是'video/mp4' – dylanjha
其實,我的錯誤:API調用*不是很正確。它缺少'x-amz-metadata-directive:REPLACE'。如果未指定,則默認爲「COPY」。請注意,通過'REPLACE',*所有*元數據將僅替換爲您提供的元數據,因此如果您想保留其他元數據,則必須將其提取並將其包含在放置/複製請求中。 http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectCOPY.html –