私はDjangoの機能を実装して、クライアント(iPhoneアプリ)からAmazon S3サーバに画像をアップロードしようとしています。 iPhoneアプリケーションは、HTTPBodyのイメージの内容を含むHttpRequest(メソッドPUT)を送信します。例えば、クライアントは、次のURLにイメージを置く:http://127.0.0.1:8000/uploadimage/sampleImage.png/PUT経由でDjangoでファイルをアップロード
ジャンゴでの私の機能は、PUT要求を処理し、S3にファイルを保存するために次のようになります。
def store_in_s3(filename, content):
conn = S3Connection(settings.ACCESS_KEY, settings.PASS_KEY) # gets access key and pass key from settings.py
bucket = conn.create_bucket("somepicturebucket")
k = Key(bucket)
k.key = filename
mime = mimetypes.guess_type(filename)[0]
k.set_metadata("Content-Type", mime)
k.set_contents_from_string(content)
k.set_acl("public-read")
def upload_raw_data(request, name):
if request.method == 'PUT':
store_in_s3(name,request.raw_post_data)
return HttpResponse('Upload of raw data to S3 successful')
else:
return HttpResponse('Upload not successful')
私の問題は、どのようにあります私の関数に画像の名前を教えてください。私urls.pyでは、私は次のようしているが、それは動作しません。
url(r'^uploadrawdata/(\d+)/', upload_raw_data),
今
限り、私は承知しているとして、D +は数字の略で、私はの名前を渡すとき、それはここでは役に立たないのは明らかですファイル。しかし、私はこれが最初の正しい方法であるかどうか疑問に思っていました。私はこの記事hereを読んで、それは私が全く理解していない次のコード行を示している。また、私は、コードの残りの部分はすべてに約あるか見当もつかない
file_name = path.split("/")[-1:][0]
を。私はこれに少し慣れているので、単に画像をアップロードする方法の提案は大歓迎です。ありがとう!
ありがとうダニエル。しかし、なぜリンクされた答えは無関係ですか? PUT経由でアップロードをしようとしていますか?私は基本的に何かをやっている気がします。おそらく私は私の目的のためにPUTを使うべきではありません、あるいは、おそらく私は理解していないリンクされた答えのコードをいくつか持っているべきです... –
また、私はURLを試しました(r '^ uploadrawdata /(\ w +)/ '、upload_raw_data) - エラーメッセージ "現在のURL、
uploadrawdata/MD5-HASH-SOMETHING.png/
がこれらのいずれとも一致しませんでした。" http://127.0.0.1:8000/uploadrawdata/MD5-HASH-SOMETHING.png/にPUTしようとすると –