2

django アプリケーションで、Amazon s3 にアップロードされたファイルの名前を持つ POST 変数を受け取りました。

しかし、Unicode でキーを受け取り、キーを boto と amazon s3 に渡すと、何も返されません。ただし、バケットを boto でリストし、リストからキーを取得すると、Amazon s3 は期待されるオブジェクトを返します。

だから私の質問は、どのようにユニコードキー名を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 文字列を渡すと問題なく動作します。変換する必要はありません。正しいキー名を検索していることを確認してください。

サーバー側でキー名を受け取ったばかりなので、正しいと思いましたが、アプリ側で1つの名前で保存してから、新しく作成された名前(1分違う)をサーバーに送信しているようです。

4

1 に答える 1

5

'37''38'は異なる文字列です。正しい値を使用すると、おそらく問題なく動作します。

于 2011-04-04T21:25:22.687 に答える