如何转换unicode密钥名,以便amazons3能够识别它?

2024-09-24 00:33:00 发布

您现在位置:Python中文网/ 问答频道 /正文

在django应用程序中,我接收到一个POST变量,该变量的文件名上载到amazons3。在

但是我收到的是unicode格式的密钥,当我将密钥传递给boto和amazons3时,不会返回任何内容。但是,如果我用boto列出bucket,并从列表中获取密钥,那么amazons3将返回预期的对象。在

所以我的问题是,如何将我的unicode keyname转换成boto所拥有的相同的密钥编码,这样amazon就会给我这个对象。在

我怎么知道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字符串很好,不需要转换它,只需确保您搜索的键名是正确的!在

因为我刚刚在服务器端收到了密钥名,所以我认为它是正确的,但是错误似乎是在应用程序端用一个名称保存,然后向服务器发送一个新创建的名称(一分钟不同)。在


Tags: 对象keyname应用程序getbucketunicode密钥