2013-01-11 50 views
2

我有一個視頻文件的Content-Type爲空的問題,並希望根據文件的擴展名用Content-Type:video/**更新這些對象。但是,當我將put方法用於與content-type相同的鍵/存儲區時,它將被'0'內容長度覆蓋。我可以更新現有的Amazon S3對象標題屬性嗎?

Can I update an existing Amazon S3 object?鏈接說 放置將覆蓋文件s3對象不符合我的目的。

注意:我不想使用java sdk。由於移動設備的內存限制,我想使用普通的java httpput。

+0

這是S3 REST API有點奇怪。應該使用PUT創建項目,POST進行更新,但它們同時使用PUT和POST來創建對象。說實話,我沒有看到更新的可能性,但我知道它可以完成,因爲Web客戶端和客戶端工具都可以更新屬性。 –

回答

1

您可以嘗試的是使用具有相同源和目標的PUT COPY請求。

PUT /yourvideo.flv HTTP/1.1 
Host: bucket.s3.amazonaws.com 
Date: Wed, 28 Oct 2009 22:32:00 GMT 
x-amz-copy-source: /bucket/yourvideo.flv 
Authorization: AWS AKIAIOSFODNN7EXAMPLE:0RQf4/cRonhpaBX5sCYVf1bNRuU= 

顯然python boto修改元數據,這樣

是的,我可以證實,複製工作:

PUT /test/123.png HTTP/1.1\r\n 
Host: yourbucket.s3.amazonaws.com\r\n 
Accept-Encoding: identity\r\n 
Content-Length: 0\r\n 
x-amz-storage-class: STANDARD\r\n 
x-amz-copy-source: yourbucket/test/123.png\r\n 
Date: Fri, 11 Jan 2013 15:16:48 GMT\r\n 
Content-Type: image/gif\r\n # this is the content-type set 
Authorization: AWS AKXXXXXDDRXXXXXX63CA:RcktkZ9nPwsXXXXXd+KXXXXXY=\r\n 
x-amz-metadata-directive: REPLACE\r\n 
\r\n 

S3回覆:

HTTP/1.1 200 OK 
x-amz-id-2: Vf1bRJd+e4ru0y73GB0Ra0xYB2vv6GLWYKsHAC4AzE+a8uZB56Xy8+YTDkJ0/wfN 
x-amz-request-id: C0E6A2823F3FB3E9 
Date: Fri, 11 Jan 2013 15:16:49 GMT 
Content-Type: application/xml 
Content-Length: 234 
Server: AmazonS3 

驗證:

HEAD /test/123.png HTTP/1.1\r\n 
Host: yourbucket.s3.amazonaws.com\r\n 
Accept-Encoding: identity\r\n 
Date: Fri, 11 Jan 2013 15:25:23 GMT\r\n 
Content-Length: 0\r\n 
Authorization: AWS AXXXIXXXXMDDXXXXX7XXXCA :HoZ4Woxxw6SWlxxxx000Rxxm8ODQ=\r\n 
\r\n 

S3回覆具有正確內容類型(一個我錯誤地設定爲圖像/ GIF代替圖像/ PNG)

HTTP/1.1 200 OK 
x-amz-id-2: 7Ut6sdm6i+1h7Di5UrB4v9Sn3mVCNjyDnkb4rm1jGzN6wBTgDT2/yCSHdrKG12Jd 
x-amz-request-id: 38A1F6EC6ECD1D2D 
Date: Fri, 11 Jan 2013 15:25:24 GMT 
Last-Modified: Fri, 11 Jan 2013 15:25:24 GMT 
ETag: "c09fad0faf4e6bb1148670af78b6de41" 
Accept-Ranges: bytes 
Content-Type: image/gif 
Content-Length: 122311 
Server: AmazonS3