2

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

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

所以我的问题是,如何将我的 unicode 键名转换为与 boto 具有的键相同的编码,以便亚马逊将对象提供给我。

我怎么知道 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 字符串可以正常工作,无需转换它,只需确保您正在搜索正确的键名!

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

4

1 回答 1

5

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

于 2011-04-04T21:25:22.687 回答