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