2016-12-02 13 views
0

NET MVC application, in a form I have **5** file input elements and Im saving the form using jquery ajax`。DBにコミットする前にサーバに一時ファイルを格納するための推奨される方法

enter image description here

ので**新しいレコード**のために、ユーザーがファイルを選択することができ、MVCコントローラにファイルをアップロードするが、私は主キーを持っていけないので、コントローラで、私はそれを保存することはできませんレコードのために私は救うつもりです。だから一時的に保管しなければならない。

これを実行するベストプラクティスは何ですか?私はを私のSession["appsession"]に保存することを考えていました。私のコントローラーでフォームを送信するときは、Sessionを取得し、サーバーに画像をコミットすることができます。

他の方法では、フォームをコミットすることができますが、これはファイルをアップロードするためですが、それはもっと複雑なものです。

ヒント?

答えて

0

セッションストレージを使用しないでください。これにより、アプリケーションプールで使用されるメモリが膨大になったり、SQL Serverセッションを使用している場合、セッションインスタンスからアイテムを明示的に削除しないと、アプリケーションの処理速度が低下します。あなたはいつそれを掃除しますか?同じユーザーが2つの異なるブラウザウィンドウ(同じブラウザインスタンス)で同じセッションで同じページを開くとどうなりますか?セッションは恐ろしい過度の選択です。

ファイルシステム、クラウドストレージ、またはデータベーステーブル(blob)を保持することができます。すべてがセッションストレージにダンプされた場所を修正しなければならなかったアプリケーションの数は信じられません。もう一度、それを避けてください。何をするにしても、ユーザーがトランザクションを終了する(または完了しない)場合、クリーンアップ操作をどのように行うかを検討します。

1

どのように突き出すここでそれについて:

using System.IO; 

string dir = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString()); 
Directory.CreateDirectory(dir); 

はその後、ファイルを移動し、IDを取得し、レコードを作成dirを削除します。

もちろん、最初の手順(作成レコード)が失敗した場合やその他のエラーが発生した場合に、アップロードの処理とファイルの削除について心配する必要があります。

私はあなたがそのワークフローを何らかの形で変更することをお勧めします:まずサーバーを呼び出してレコードを作成し、次にファイルをアップロードするために戻ってきてください。これは必ずしも2つのUIステップで行う必要はありません。つまり、FORMタグのファイルアップロードをラップして、input [type = hidden]を追加しますが、そのレコードの作成に必要な残りの入力は追加しません。 onclick:IDを返すレコードを作成するAJAX。隠しフィールドの値をそのIDに設定して、フォームを送信します。サーバー側のアップロードハンドラは、IDとファイルを受信します。その後、レコードを更新することができます。

+0

フィードバックありがとうございました。あなたのフィードバックも素晴らしいものでした。 – VAAA

関連する問題