2016-07-27 12 views
0

画像をアップロードしたいFacebookスタイル:フォームを送信する前に画像を選択し、すべてアップロードされたらすぐにフォームを送信してください。私はフロントエンドでそれを行う方法を知っていますが、問題はバックエンドにあります。私はバックエンドでイメージを管理するいくつかの方法を見つけましたが、私は満足できません。このすべての大部分は、いくつかの写真がすでにアップロードされている間にユーザーがブラウザを閉じる場合のように、使用されない写真を保存することを避けることです。私は心の中でアップロードを行うための3つの方法があると私は最高のだろうか知りません:フォーム提出の前に画像をアップロードするDjango

  1. は「TMP」ディレクトリを作成し、そこにアップロードされたすべての写真を配置し、すべてのフォームが送信される移動使用した写真を別のディレクトリにコピーします。
  2. データベースにTempPhotoテーブルを作成し、使用した写真をTempPhotoから永久テーブルに移動して、以前の解決方法と同じようにします。
  3. 写真をパーマネントテーブルに直接追加し、スケジュールされた時間に使用されていないもの(他のエンティティに関連していないもの)を消去します。 (私はこれがより遅い解決策であると思われます)

答えて

1

私は、いくつかの改革によるあなたの最初のやり方が最良の方法だと思います。 tmpディレクトリを作成し、並行処理を制御する各画像に一意のデータ(IPアドレスなど)を添付して、ユーザがtmpディレクトリから画像を削除する信号をバックエンドに送信するための$(window).unload(...)にスクリプトを書き込むことができます。フォームを送信する前にウィンドウを閉じます。

+0

このように、1人のユーザーとの同時性にはまだ問題があります。ユーザーが多数の写真をすばやくアップロードして、同じ固有IDが生成されるとします(例:IP + 1)。どうすればDjangoでこれを処理できますか?私のポストで言及した2番目の方法は同時実行性を扱い、ディレクトリ間の写真よりもテーブル間でテーブルのエントリを移動する方が遅いので、それを破棄しましたか? –

+0

実際には、余分なデータ(画像ハッシュ値や自動インクリメンタルIDなど)を追加することで、より一意にすることができます。コメント内のあなたの質問に対する答えはYESです。私は 'tmp'ディレクトリを使用するよりもデータベースを扱う際にプロセスがより遅くなると思います。 –

関連する問題