python - 如何转换 unicode 键名以便 amazon-s3 能够识别它?

标签 python unicode amazon-s3 boto

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

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

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

我如何知道 boto key 采用什么编码?

非常感谢您的任何见解,这让我发疯。在我们添加正斜杠之前一切都运行良好,我不明白为什么这会产生影响。

这是来自终端的代码:

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

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

最佳答案

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

关于python - 如何转换 unicode 键名以便 amazon-s3 能够识别它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5544465/

相关文章:

python - Django 使用外键进行多个查询

python - 为什么 MySQLdb for Mac 必须安装 MySQL 才能安装?

swift - 如何在 Swift 中从 parse.com 数据库中读取 unicode 字符?

ios - 如何在 S3 PutObjectRequest 完成时添加监听器?

amazon-s3 - 如何将 amazon S3 存储桶策略设置为除管理员之外的所有人私有(private)?

python如何将css文件解析为键值

python - 如何使用 python 从 azure databricks 笔记本连接到本地 Windows 服务器?

html - iOS HTML Unicode 到 NSString?

c - 如何迭代Unicode字符? (不是代码点)

python - 如何检查S3 bucket是否有标签