2011-01-20 7 views
1

私はメモを書き込むことができるWebアプリケーションで作業しています。ユーザーがノートに添付ファイルを追加できるようにするためにいくつかの機能を追加したいと思っていますが、その背後にあるロジックを理解するのに少し問題があります。まだ保存されていないレコードにファイルを関連付ける方法

ウェブメールやphpBBフォーラムの投稿のように動作します。新しいメッセージを開始します。ファイルアップロード入力要素があり、その隣に「追加」ボタンがあります。ファイルを追加すると、ファイルがアップロードされ、メッセージを書き続けることができます。最後に「提出」をクリックすると、メモが作成され、アップロードされたファイルが関連付けられます。ここにいくつかのASCIIアートがあります:

Subject:  ______________ 

Message:  ______________ 
      ______________ 
      ______________ 

Attachments: some_file.txt 
      resume.odt 
      ______________ [Browse][Add] 

      [Save] 

しかし、それがまだ書かれているときにアップロードを関連付けるにはどうしたらいいですか?まだ保存されていません。 IDはありません。通常、アップロードされたファイルをノートIDと関連付けるデータベーステーブルを追加しますが、まだ保存されていないノートでは機能しません。私が心配しているのは、ユーザーが新しいメモを書き始めたときにファイルを追加してから、メモを保存しない(たとえば、ブラウザを閉じるなど)気が変わることです。私はそれらのアップロードされたファイルが残っていることを望んでいません。

ありがとうございます!

+0

一般的なフォームの提出では、フォームの送信が完了するまでファイルのアップロードは行われません。 – horatio

答えて

1

これにはさまざまな方法があります。一見すると好きなものがあります: ユーザーが「新しいメール」をクリックしたときに「メールID」を生成し、何かをアップロードしたいときに既にそれを持っています。

ちょっと実験的なアイデア: ファイルをアップロードするときにファイルのハッシュ(タイムスタンプなどでp.m. MD5)を生成します。彼が最終的にメールを提出すると、メールにハッシュを追加し、これを前のアップロードのキーとして使用します。

2

大丈夫なので、彼はあなたが描くことができたレイアウトを見てそのURLを開きます(ASCIIアートの名誉)。ページをレンダリングする前に、IDを提供する空のノートレコードを作成しました。彼はファイルをアップロードします(ハードドライブのどこかに移動し、別のデータベーステーブルのパスだけを保存し、ファイルとファイルの関係は多対1)ので、あなたはすでにそれらに関連付けるIDを持っています! 捨てられたメモが付いている孤児のファイルです。それを処理するいくつかのオプションがありますが、それらはすべて、メンテナンスと呼ばれるWebアプリケーションの別の章を持つことになります。私は最後の音符IDをユーザープロファイルに保存し、前の音符を保存したり破棄したりせずに新しい音符を作成させません。

1

AJAXの前日に戻って、フォームにファイルを添付したい場合は、フォーム提出時にファイルをアップロードするだけです。今では、ファイルを転送するためのあらゆる種類の賢明な方法、または少なくとも2つまたは3つの一般的な方法があり、一部はFlashまたはjQueryを使用しています。しかし、これらの手法では、メンテナンス上の大きな問題を発見しました。フォームを記入すると同時にイメージをアップロードすると、フォームが送信されるという保証はありません。これらのアップロードされたファイルには、何らかのタイムアウトメカニズムが必要です。これは、一般的に、何らかのハウスキーピングプロセスを開始することを意味します。あなたはあなたのアーキテクチャに別の動く部分を加えることになります。そして、物事が制御不能にならないように定期的に監視する必要があります。

トラフィックの予想される頻度とサイズに応じて、孤立したファイルを削除するためのいくつかのパラメータを定義する必要があります。 1日に100回未満のアップロードを予定している場合は、毎日のパージはうまくいくはずです。各パージでは、一定時間孤立したファイルを削除したいとします。これを行うには、古いファイルを識別するメカニズムが必要です。ファイルをテーブルレコードと比較することができますが、これにはサイトの速度に影響を与える余分なデータベースリソースが必要です。これは、一度処理されると他の場所にファイルを移動し、孤立している可能性のある孤児を特定しやすくするというヒントです。

このプロセスを監視することで、実行頻度を増やすか減らすかを決めることができます。あなたがデザインの意思決定を悪くした場合、特に1時間以上頻繁に実行される場合は、ハウスキーピングを行うのがより苦痛になります。

幸運を祈る!

関連する問題