如何转换unicode密钥名称,以便amazon-s3能够识别它?

Tom*_*ner 1 python unicode amazon-s3 boto

在django应用程序中,我收到一个POST变量,其中包含上传到amazon s3中的文件名.

但是我收到unicode中的密钥,当我将密钥传递给boto和amazon s3时,没有返回任何内容.但是,如果我用boto列出存储桶,并从列表中获取密钥,那么amazon s3将返回预期的对象.

所以我的问题是,如何将我的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>
Run Code Online (Sandbox Code Playgroud)

--------编辑----------

传递unicode字符串工作正常,无需转换它,只需确保您正在搜索正确的密钥名称!

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

Ign*_*ams 5

'37'并且'38'是不同的字符串.使用正确的值时,它可能会正常工作.