jQueryプラグインを使用して、asp.net mvcのファイルのAjaxロードを固定します

この記事では、 jQuery 、そのプラグインなど、およびそのような母親を使用して、 asp.net mvcにファイルを動的にアップロードする方法を理解します。 これを行うために、「概念実証」を作成し、プロセスを楽しんでみます。 =)



計画を実施するには、多くのオプションがあります。 Ajaxアップロード複数ファイルアップロードの 2つのプラグインに焦点を当てます





パート1:サーバー側



サーバー上ではすべてが簡単です。 Request.Files



からファイルを受け取ります。 JSONを介してクライアントスクリプトと通信します。 このため、コントローラーの戻り値はJsonResult



またはその子孫になります。 ただし、コンテンツタイプはtext / htmlのままにします。そうしないと、ブラウザはapplication / jsonのようなコンテンツを保存するように提供します。



シンプルアクション:
  1. プライベート読み取り専用IFileService _fileService = new FileServiceStub ;
  2. /// <summary>
  3. ///サーバーへのアップロードファイルの処理。
  4. /// </ summary>
  5. /// <returns>ファイル名のリストを含むJSON結果</ returns>
  6. [ HttpPost ]
  7. public JsonResult UploadFiles
  8. {
  9. ICollection < string > collection = _fileService。 アップロード リクエスト。 ファイル ;
  10. 新しい JsonResultを返す
  11. {
  12. ContentType = "text / html"
  13. データ= 新規 {コレクション}
  14. } ;
  15. }




パート2: 複数ファイルアップロードプラグイン



このプラグインはjQuery.Formで動作します



HTMLフォーム:
  1. < form id = "upload-files" action = "/ File / UploadFiles" method = "post" enctype = "multipart / form-data" >
  2. < div >
  3. ファイルのアップロード:
  4. < 入力 クラス = "multi-file-upload" タイプ = "ファイル" name = "ファイル" / > < / / div >
  5. < 入力 タイプ = 「送信」 = 「ダウンロード」 > < / / 入力 >
  6. < / フォーム >
  7. <!-出力メッセージのダウンロードの場所->
  8. < div id = "messages" > < / / div >
  9. < h3 >ダウンロードしたファイルの一覧< / / h3 >
  10. < ol id = "file-list" > < / / ol >




プラグインのセットアップ:
  1. //ドキュメントが完全にロードされるとコードを実行します。
  2. $ ドキュメント準備完了 関数 {
  3. var form = $ '#upload-files' ; //フォームをダウンロードします。
  4. var messages = $ '#messages' ; //通知領域。
  5. var list = $ '#file-list' ; //ダウンロード済みのファイルのリスト。
  6. // MultiFileをカスタマイズします。
  7. $ '.multi-file-upload' MultiFile {
  8. max 5 //一度にダウンロードされるファイルの数。
  9. STRING { //改行。 htmlコード(たとえば、写真)を埋め込むことができます。
  10. remove 'Remove'
  11. selected 「選択:$ file」
  12. 拒否されました '無効な拡張子:$ ext!'
  13. duplicate 'このファイルは既に選択されています: \ n $ファイル!'
  14. }
  15. } ;
  16. // ajaxFormを設定します
  17. フォーム。 ajaxForm {
  18. iframe true // iframeを使用して送信します。
  19. dataType "json" // jsonを使用して交換します。
  20. //ファイルを送信する前に実行します。
  21. beforeSubmit function {
  22. // submitがjavascriptから呼び出された場合、次の行のコメントを解除します。
  23. // $。fn.MultiFile.disableEmpty();
  24. //ダウンロードメッセージを表示します。 ここにjQuery.blockUIをねじ込む方が良いのですが、わかりやすくするために残しておきます。
  25. メッセージ。 html '<img src = "/ Content / busy.gif" />ファイルのダウンロード...' ;
  26. }
  27. //成功に関する応答を受け取った後に実行します。
  28. 成功 関数 結果 {
  29. // submitがjavascriptから呼び出された場合、次の行のコメントを解除します。
  30. // $。fn.MultiFile.reEnableEmpty();
  31. //ファイルアップロードフォームをクリアします。
  32. $ '.multi-file-upload' MultiFile 'reset' ;
  33. //ダウンロードメッセージを消去します。
  34. メッセージ。 ;
  35. //アップロードされたファイルの一般的なリストに新しいアップロードされたファイルを追加します。
  36. if result。collection。length > 0 {
  37. $。 each result。collection function i {
  38. リスト。 append '<li>' + this + '</ li>' ;
  39. } ;
  40. }
  41. }
  42. //エラー時に実行します。
  43. エラー 関数 xhr textStatus errorThrown {
  44. //ファイルアップロードフォームをクリアします。
  45. $ '.multi-file-upload' MultiFile 'reset' ;
  46. alert 'ファイルのダウンロード中にエラーが発生しました:' + errorThrown ;
  47. }
  48. } ;
  49. } ;




パート3: Ajaxアップロードプラグイン





HTMLフォーム:
  1. <!-ファイルアップロードフォーム。 任意の場合があります。 ->
  2. < div id = "file_upload_button" >
  3. <a href = "#"> </a>新しいファイルを追加します。 < / div >
  4. < div id = " uploading " style = "display:none" > < img src = "/Content/busy.gif" alt = "Download" align = "left" / >ダウンロード中。 < / div >
  5. <!-ダウンロードしたファイルのリスト->
  6. < ol class = "files" > < / / ol >




プラグインのセットアップ:
  1. $ ドキュメント準備完了 関数 {
  2. 新しい AjaxUpload $ '#file_upload_button'
  3. {
  4. //選択後すぐにファイルを送信するかどうか
  5. autoSubmit true
  6. //送信先
  7. アクション '/ File / UploadFiles'
  8. //ファイルを保存する変数の名前。
  9. 名前 'myfile'
  10. //サーバー応答のタイプ。
  11. 応答 'json'
  12. //ファイルをアップロードする前に起動します
  13. // falseを返してキャンセルすることもできます。
  14. onSubmit function file extension {
  15. //ファイルを選択するための「ボタン」を非表示にします。
  16. $ '#file_upload_button' hide ;
  17. //ダウンロードメッセージを表示します。
  18. $ '#uploading' show ;
  19. // 1つのファイルのみをアップロードする必要がある場合:
  20. //this.disable();
  21. }
  22. //サーバーから応答を受信した後に実行されます。
  23. // fileは、クライアントが指定したファイルの名前です。
  24. //応答-サーバーの応答。
  25. onComplete function file response {
  26. $ '#file_upload_button' show ;
  27. $ '#uploading' hide ;
  28. // javascriptオブジェクトを取得します。
  29. var resultObject = eval '(' + response + ')' ;
  30. //アップロードされた新しいファイルを一般リストに追加します。
  31. if resultObject。collection。length > 0 {
  32. $。 each resultObject。collection function i {
  33. $ '.files' append '<li>' + this + '</ li>' ;
  34. } ;
  35. }
  36. }
  37. } ;
  38. } ;


結論の代わりに



MultiFileは一度に複数のファイルを送信できますが、標準形式( <input type="file"...



)でのみ配置され<input type="file"...



。 サイズ:MultiFile(〜20Kb)+ jQuery.Form(〜22Kb)=〜42Kb。



AjaxUploadはファイルを1つずつ送信しますが、プレゼンテーションを柔軟にカスタマイズできます。フォームに添付されません。 プラグインのサイズ:14Kb、つまり MultiFile + Formよりも3倍少ない。



どちらにも「制限」があります。ファイルは一度に1つずつ選択されます。 一度に複数(10個)のファイルを選択する場合は、フラッシュ技術を検討してください。



この例のソースコードはネットワーク上にあります。 全体をマージできますが、 すぐに確認できます



All Articles