10

blueimp ファイル アップロードを MVC アプリケーションに追加しようとしていますが、投稿アクションでファイルを受信する際に問題が発生しています (複数ファイルのアップロード機能を使用しようとしています)。

私の見解では、次のコードがあります。

<form id="file_upload" enctype="multipart/form-data" action="Home/SaveFile" method="post">    
   <input type="file" name="file" multiple="true"/>
   <button>Upload</button>
   <div>Upload files</div>        
</form>
<br />
###############################
<table id="files">
</table>

<button id="start_uploads">Start uploads</button>
<button id="cancel_uploads">Cancel uploads</button>

blueimp ファイル アップロードの JQuery コードは次のとおりです。

$(document).ready(function () {

        $('#file_upload').fileUploadUI({
            uploadTable: $('#files'),
            downloadTable: $('#files'),
            buildUploadRow: function (files, index) {
                return $('<tr><td class="file_upload_preview"><\/td>' +
                        '<td>' + files[index].name + '<\/td>' +
                        '<td class="file_upload_progress"><div><\/div><\/td>' +
                        '<td class="file_upload_start">' +
                        '<button class="ui-state-default ui-corner-all" title="Start Upload">' +
                        '<span class="ui-icon ui-icon-circle-arrow-e">Start Upload<\/span>' +
                        '<\/button><\/td>' +
                        '<td class="file_upload_cancel">' +
                        '<button class="ui-state-default ui-corner-all" title="Cancel">' +
                        '<span class="ui-icon ui-icon-cancel">Cancel<\/span>' +
                        '<\/button><\/td><\/tr>');
            },
            buildDownloadRow: function (file) {
                return $('<tr><td>' + file.name + '<\/td><\/tr>');
            },
            beforeSend: function (event, files, index, xhr, handler, callBack) {
                handler.uploadRow.find('.file_upload_start button').click(callBack);
            }
        });
        $('#start_uploads').click(function () {
            $('.file_upload_start button').click();
        });
        $('#cancel_uploads').click(function () {
            $('.file_upload_cancel button').click();
        });
    });

コントローラー内には、次のアクション メソッドがあります。

[AcceptVerbs(HttpVerbs.Post)]
    public ActionResult SaveFile(IEnumerable<HttpPostedFileBase> files)
    {
        foreach (HttpPostedFileBase file in files)
        {
            //some file upload magic                
        }
        return View("MyView");
    }

MVC3を使用しています。

アクション メソッドでは、引数が IEnumerable 型の場合は null を受け取り、引数が HttpPostedFileBase 型の場合は奇妙な方法でファイルを受け取り、アクション メソッドは想定どおりに動作しません。

どんな種類の助けも大歓迎です、ありがとう。

乾杯!

4

3 に答える 3

8

コントローラ アクションは、SaveFileファイルごとに呼び出されます。したがって、次のようになります。

[HttpPost]
public ActionResult SaveFile(HttpPostedFileBase file)
{
    //some file upload magic

    // return JSON
    return Json(new
    {
        name = "picture.jpg",
        type = "image/jpeg",
        size = 123456789
    });
}

また、同じリクエストで複数のアップロード ファイルを処理したい場合は、ドキュメントのそれぞれのセクションを参照してください。

于 2011-02-21T09:24:00.037 に答える
1

使用できるファイルを取得するには、

foreach (string inputTagName in Request.Files)
{                
    HttpPostedFileBase file = Request.Files[inputTagName];
}
于 2011-03-22T10:04:07.407 に答える
1

これは古い問題であることは知っていますが、ここで指摘するだけです。Darin Dimitrovの投稿に加えて、返される json はjQuery File Uploadと互換性のある形式である必要があります。これは、1 つのファイルが送信された場合でも配列を想定しています。例えば:

        return Json(
            new
            {
                files = new[]{
                                new { 
                                        name = "www.png",
                                        size = "1234567"
                                    }
                              }
            }
        );
于 2014-05-21T14:46:28.533 に答える