バックグラウンド
私はDjangoでかなり大きなファイルのアップロードを行っています。ファイルサイズは通常10MB-100MBです。
Herokuを使用していて、リクエストのタイムアウトが30秒に達しています。
始まり
制限を回避するために、Herokuの推奨事項は、ブラウザーからS3に直接アップロードすることです。
Amazonは、アップロードを実行するためのHTMLフォームを作成する方法を示すことにより、これを文書化します。
私はDjangoを使用しているので、HTMLを手動で作成するのではなく、django-uploadify-s3(例)を使用しています。これにより、実際のアップロードを実行するJSでラップされたSWFオブジェクトが提供されます。
この部分は正常に機能しています。やったー!
問題
問題は、そのデータを正常な方法でDjangoモデルに結び付けることです。現在、データはファイルの場所を指す単純なURL文字列として返されます。
ただし、以前はdjango-storagesのS3 Botoを使用して、すべてのファイルをとして管理していFileFields
ましたS3BotoStorageFile
。
繰り返しになりますが、S3 Botoは単独でうまく機能し、Uploadifyは単独でうまく機能しています。問題は、この2つを組み合わせることにあります。
私の理解では、にデータを入力する唯一の方法は、ファイル名とファイルの内容FileField
の両方を提供することです。ブラウザからDjangoにファイルをアップロードする場合、Djangoはファイルの内容をバッファに入れて、好きなように実行できるため、これは問題ありません。ただし、私のようにS3に直接アップロードする場合、Djangoはファイル名とURLのみを受け取り、バイナリデータは受け取らないため、を正しく入力できません。FieldFile
助けを呼ぶ
S3BotoのFileFieldをS3への直接アップロードと組み合わせて使用する優雅な方法を知っている人はいますか?
それ以外の場合、URLだけに基づいてS3ファイルを管理するための最良の方法は何ですか?有効期限、キーIDなどの設定を含みます。
どうもありがとう!