クライアント(この場合はiPhoneアプリ)からS3へのアップロードに関する一般的な質問があります。私はDjangoを使用して、EC2インスタンスでWebサービスを作成しています。以下の方法は、S3にファイルをアップロードするために最低限であり、小さいファイル(JPGのみまたはPNG画像< 1メガバイト)と非常によく動作します:画像アップロード:iPhoneクライアント - Django - 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('somebucket')
k = Key(bucket) # create key on this 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 uploadimage(request, name):
if request.method == 'PUT':
store_in_s3(name,request.raw_post_data)
return HttpResponse("Uploading raw data to S3 ...")
else:
return HttpResponse("Upload not successful!")
私はまだこのすべてに非常に新しいので、私ここで何が起こるのか理解していない。その場合ですか?
- Djangoはファイルを受信し、それをEC2インスタンスのメモリに保存しますか?
- raw_post_dataの使用を避け、メモリの問題を避けるためにチャンクを行うべきですか?
- Djangoがファイルを受け取ったら、そのファイルを関数store_in_s3に渡しますか?
- S3へのアップロードが成功したかどうかはどのようにわかりますか?
一般に、私のコードの1行が次々に実行されるのだろうかと思います。例えば。いつreturn HttpResponse("Uploading raw data to S3 ...")
火災?ファイルがまだアップロードされている間、またはアップロードが正常に完了した後ですか?
ありがとうございました。また、私はこの主題を扱うすべての文書に感謝します。私は、O'ReillyのPython & AWS Cookbookの章を見てきましたが、それはコードサンプルなので、私の質問には本当に答えません。
本当に助かりました。私はちょうど他のいくつかの投稿をチェックして、クライアント(iPhone)からS3に直接アップロードするのが最善の解決策であるかのように思えます。これはサーバーをショートカットし、私が見る限り、トラフィックを2倍には作成しません(つまり、最初にEC2/DjangoにアップロードしてS3にアップロードします)。 –
あなたが話している唯一の警告は、アップロードされた画像の処理を行う場合です。私のビジネスでは、各イメージはDjangoサーバー上でさまざまなサイズにリサイズされ、それぞれがCDNにアップロードされます。ちょっとした例ですが、自分のアプリに留意してください。 – Jordan
私は参照してください。だから私はサーバー上の画像の処理をしない場合、行く方法は直接クライアント→S3です。何らかの処理が必要な場合は、Djangoサーバーを経由します。もう一度ありがとう、これは本当に役に立ちました。 –