Как преобразовать имя ключа Unicode, чтобы amazon-s3 распознал его? - PullRequest
1 голос
/ 05 апреля 2011

В приложении django я получаю переменную POST с именем файла, загруженного в amazon s3.

Но я получаю ключ в юникоде, и когда я передаю ключ в boto и amazon s3, ничего не возвращается. Однако если я перечислю ведро с помощью boto и получу ключ из списка, то amazon s3 вернет ожидаемый объект.

Итак, мой вопрос: как я могу преобразовать свое имя в Unicode-ключе в ту же кодировку ключа, что и у 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>

-------- РЕДАКТИРОВАТЬ ----------

Передача строки в юникоде работает нормально, ее не нужно преобразовывать, просто убедитесь, что вы ищете правильное имя ключа!

Поскольку я только что получил имя ключа на стороне сервера, я предположил, что оно было правильным, но ошибка, по-видимому, связана с сохранением приложения под одним именем и последующей отправкой на сервер вновь созданного имени (отличающегося на одну минуту).

1 Ответ

5 голосов
/ 05 апреля 2011

'37' и '38' - это разные строки.Вероятно, он будет работать нормально, если вы используете правильное значение.

...