2011-04-04 30 views
1

在django應用程序中,我收到一個POST變量,其中一個文件的名稱上傳到amazon s3中。如何將unicode密鑰名稱轉換爲amazon-s3會識別它?

但我收到的密鑰在unicode中,當我將密鑰傳遞給boto和amazon s3時,沒有任何返回。但是,如果我用boto列出桶並從列表中獲取密鑰,那麼amazon s3會返回預期的對象。

所以我的問題是,我怎樣才能將我的unicode鍵名轉換爲boto所具有的密鑰的相同編碼,以便亞馬遜會給我這個對象。

我怎樣才能知道什麼編碼的博託密鑰是在?

非常感謝任何見解,這個讓我瘋狂。在我們添加正斜槓之前,它一切正常,我不明白爲什麼會有所作爲。

這裏是從終端代碼:

>>> unicode_key_name 
u'missionuploads/tom-mission-4d8f9da9122ac21c17000002-4_4_11_9_38_PM.jpg' 
>>> boto_key_name 
'missionuploads/tom-mission-4d8f9da9122ac21c17000002-4_4_11_9_37_PM.jpg' 
>>> len(unicode_key_name) 
70 
>>> len(boto_key_name) 
70 
>>> unicode_key = bucket.get_key(unicode_key_name.encode('utf-8')) 
>>> unicode_key 
>>> unicode_key = bucket.get_key(unicode_key_name.encode('ascii')) 
>>> unicode_key 
>>> boto_key = bucket.get_key(boto_key_name) 
>>> boto_key 
<Key: user.media.eu,missionuploads/tom-mission-4d8f9da9122ac21c17000002-4_4_11_9_37_PM.jpg> 

-------- ----------編輯

傳遞Unicode字符串正常工作有不需要轉換它,只要確保你正在尋找正確的鍵名!

因爲我剛剛收到服務器端的密鑰名稱,我認爲它是正確的,但錯誤似乎是在應用程序端保存一個名稱,然後向服務器發送一個新創建的名稱(一分鐘不同) 。

回答

5

'37''38'是不同的字符串。當您使用正確的值時,它可能會正常工作。

+0

感謝您爲Ignacio額外的一雙眼睛,我甚至將所有特殊字符作了區分並跳過了明顯的部分,因爲我從來沒有考慮過我會得到錯誤的文件名。乾杯 – 2011-04-04 21:42:10