2017-01-07 8 views
0

私は満足のいく答えを見つけることができなかったという質問があります。まだ挿入されていないレコードを参照しているファイルのアップロード

私は「製品の追加」画面を持っていますが、この製品はゼロまたは多くの画像を持っています。この同じ画面にはアップロードオプションがあります。

私の質問は次のとおりです。私はそれがまだIDを持っていない場合、どのように写真を製品にアップロードできますか?まだデータベースには保存されていないためです。

この状況にはどのようなベストプラクティスがありますか?私はちょうどそれを処理する方法に私のポイントを下に一覧表示しています

答えて

0

事前に

ありがとう:

  1. が一度の両方を扱う - 保存に一度画像と製品の詳細を送信します/ enctype=”multipart/form-data”springを使用)を使用して/ボタンをクリックしてクリックします。
    • コードで処理できるようになりました。検証を実行します。
    • すべての検証に合格した場合は、画像をアップロード/保存します。
    • 製品が保存されているObject/DBにurl/filepathを送信します。
    • 欠点:
      • セイは、ユーザーが既にファイルをアップロードした、製品の詳細を記入しています。その場合は、ユーザーが商品の詳細をすべて入力してからアップロードするまで待機しています。
      • 保存中の最終アップロードには時間がかかります。 (第二のオプションは、これを克服することができます)まず、彼らは保存に利用でき、その後、製品にいるときのよう
  2. アップロード画像 - ときのように(サーバーへの最初の画像をアップロードし
    • をユーザーは画像を追加し、アップロードを続ける)。
    • これらのイメージすべてを一時的な場所に保存し、これらのイメージを一意に識別するためのUUID番号を返します。
    • 保存時/追加時に、クライアントがアップロード時にサーバーから取得したすべてのUUIDのリストを送信するようにします。現在、サーバーは、すべてのイメージを一時ディレクトリーから中央サーバーに移動するか、またはイメージをProductに関連付けることができるかを識別できます。ユーザーが商品ページのバックアウト時に
    • あなたがのための任意の製品に関連付けられていないこれらの画像を削除するには、すべての3の組み合わせを保存したり、ずに最後X分が言う別のCron JobまたはSessionTimeoutListenerまたはクライアントからの呼び出しを持つことができます(セッションタイムアウト分)
    • 欠点:
      • が変化し、後処理/クリーンアップのオーバーヘッドの多くを必要とします。
  3. ハンドル製品まず画像 - 保存されてしまったのProductIDを返す保存し、サーバー上のサーバーへの最初の
    • プッシュ製品の詳細を。
    • クライアントはproductIdとImagesを使用して別のサーバーを呼び出します。
    • 欠点:
      • 我々は悪いである、トランザクションを処理するために、クライアントに頼っています。
      • データとの不一致が増える可能性があります。
      • プロセス全体にかかる時間は、他の2つのアプローチと比較して長くなる可能性があります。

PS:私はセカンドオピニオンが良いと感じています。これは私の意見です。

関連する問題