2

現在、mvc 3 と c# を使用してアプリケーションを開発しています。ファイルアップロード用のコントローラーを実装する必要があります。ファイルのメタデータ、名前、サイズ、タイプ、ファイルへのパス、目的などを格納する db テーブルがあります。実際のファイルを Windows azure サーバーに BLOB として格納し、db 行をポインターとして使用したいと考えています。 .

ファイルに関連付けられているアイテム、つまり個人プロファイル(目的)を保存したいのですが、プロファイルの主キーを取得してからアップロードを実行し、必要な関連付けを行ってから、ファイルをアップロードして保存しますファイルのメタデータ。

ボタンを押してプロファイルページを保存する前にユーザーがファイルを選択できる場合、これをアトミックにするにはどうすればよいですか。

残りの手順を完了する前に、どうにかしてファイルをセッション変数に書き込むか、ファイルを一時フォルダー (ステージング) に書き込む必要があるようです。原子性を保証するこれらの手順を実行するより良い方法はありますか?

4

3 に答える 3

6

私見の問題は、アーキテクトがこのプロセスをアトミック操作と考えていたという事実にありますが、ユーザーエクスペリエンスはそうではありません。あなたは紛争の真っ只中にいます。=)

2 つの異なるプロセスの原子性と、後処理のデータ ユニティを保証できます。ちょっと大雑把な推測をさせてください。現在の (インタラクティブな) ユーザーのプロファイル作成プロセスを実装しているとします。

  • ユーザーが自分の写真をアップロードできるようにします。ストレージにコミットし、トランザクションとしてマークし、SessionID メタデータを追加します。

  • ユーザーがプロファイルの作成を完了したら、ストレージをスキャンして、同じ SessionID を持つ写真を探します。2 つをバインドします (たとえば、ファイル ID をプロファイル ID に関連付けます)。より洗練されたプロセスには、たとえば、代わりに保存する必要がある排他的な ID を持つ「プロファイル作成」Cookie が含まれます。したがって、ユーザーがそのセッションを放棄し、アップロードされたファイルは引き続き使用できます。

  • 「ガベージ コレクター」を実装します。しきい値に達した後 (時間またはその他) 未使用のファイルを破棄します。

これらの提案が元の要求を正確にカバーしていないことは承知していますが、実装を合理化するのに役立つ場合があります。

于 2013-08-17T16:05:09.837 に答える
0

どこで困っているのか、質問文からは不明です。

multipart/form-dataコントローラーに投稿されるhtml フォームがある場合、ファイルは残りのデータと共に 1 つの要求として投稿されます。ファイルのデータで何かをする準備ができたら、 HttpPostedFileBaseInpustStreamのプロパティにアクセスするだけです。これは、どこかに自動的にバインドされていると想定しています。一時ファイルを保存する必要はありません。IIS が既にそれを行っています。

一方、データがアップロードされる前にプロファイルが作成されることを確認したい場合、個別の HTTP リクエストでそれを処理する必要があります (ただし、これはアトミック操作の反対であるため、それはあなたが必要とするものではありません。)

ファイルが正常にアップロードされたが、サーバーがフォームの他の部分で問題を検出した場合に処理したい場合で、ファイルが再度アップロードされるまでユーザーを待たせたくない場合は、そうです。ファイルへの参照を一時的な場所に保存して、リクエスト間で失われないようにする必要があります (セッション変数やフォームの非表示フィールドへの書き戻しなど)。

于 2013-08-13T05:19:30.453 に答える