2

マルチアップロードを使用しようとしていますが、MVCアクションでアップロードされたファイルのリストを取得していません。代わりに、アップロードされたアイテムごとに file[] を取得しています。

2つのファイルをアップロードしていますが、コントローラーでこれにアクセスすると、次のようになります。

        foreach (string filename in Request.Files)
        {
            var file = Request.Files[filename];
            //file.name always reads from file[] and picks the first file in all requests


        }

私の完全な要求は次のとおりです。

Request URL: http://localhost:54434/1328/uploads/new
Request Method:POST
Status Code:201 Created
Request Headersview source
Accept:application/json
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Cache-Control:no-cache
Connection:keep-alive
Content-Length:8957136
Content-Type:multipart/form-data; boundary=----WebKitFormBoundarysX8tBB9TH4BzWZsG
Cookie:glimpsePolicy=On; _gauges_unique_month=1; _gauges_unique_year=1; _gauges_unique=1; glimpseId=Chrome 28.0; __RequestVerificationToken=itQ6HqqB_D7H_Y924w-HFfF8tq
ASP.NET_SessionId=cnj4lzpunuxnbyunl1m5gtpn
Glimpse-Parent-RequestID:04a1b6d2-6c6a-4da0-936d-3ff39e5b8c6c
Host:localhost:54434
Origin:http://localhost:54434
Referer:http://localhost:54434/1328/uploads/new
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36
X-Requested-With:XMLHttpRequest
Request Payload
------WebKitFormBoundarysX8tBB9TH4BzWZsG
Content-Disposition: form-data; name="__RequestVerificationToken"

dmPL-YRqsiwjKy43rlkYIBJE4kPlthsyL0IgnyHbtrD7Doczpbu9Z1SYeoL_93vuR15-6HfpNCCEzkzLYHBIxFJOQd3ynRGGYqILGpMWdLE1
------WebKitFormBoundarysX8tBB9TH4BzWZsG
Content-Disposition: form-data; name="private_upload"

true
------WebKitFormBoundarysX8tBB9TH4BzWZsG
Content-Disposition: form-data; name="files[]"; filename="Maid with the Flaxen Hair.mp3"
Content-Type: audio/mp3


------WebKitFormBoundarysX8tBB9TH4BzWZsG
Content-Disposition: form-data; name="files[]"; filename="Sleep Away.mp3"
Content-Type: audio/mp3


------WebKitFormBoundarysX8tBB9TH4BzWZsG--
Response Headersview source
Cache-Control:private, s-maxage=0
Content-Encoding:gzip
Content-Length:57
Content-Type:application/json; charset=utf-8
Date:Fri, 16 Aug 2013 10:55:23 GMT
Server:Microsoft-IIS/8.0
X-AspNet-Version:4.0.30319
X-AspNetMvc-Version:4.0
X-Powered-By:ASP.NET
X-SourceFiles:=?UTF-8?B?QzpcUHJvamVjdHNcU3VydmVudHJpeFxhcHBcU3VydmVudHJpeFxGYXN0U3VydmV5b3JzXDEzMjhcdXBsb2Fkc1xuZXc=?=

````

ドロップゾーンの設定は次のとおりです。

<script type="text/javascript">
        Dropzone.autoDiscover = false;

        var myDropzone = new Dropzone("form#my-awesome-dropzone", {
            paramName: "files", // The name that will be used to transfer the file
            autoProcessQueue: false,
            forceFallback: false,
            uploadMultiple: true,
            maxFilesize: 10,
            previewsContainer: ".dropzone-previews",
            clickable: ".dropzone" //make only this region clickable
        });

        myDropzone.on("addedfile", function (file) {
            /* Maybe display some more file information on your page */
            console.debug("added a file: " + file.name);
        });

        myDropzone.on("success", function (file) {
            $("#drop-success").show();
        });

        $("#btnDropzone").click(function () {
            myDropzone.processQueue();
        });
    });
</script>

アップロードされた各ファイルをコントローラーで取得して処理できるようにするにはどうすればよいですか?

4

4 に答える 4

0

私も同じ問題を抱えていました。mvcアクションを置き換えました

        for (int arquivo = 0; arquivo < Request.Files.Count; arquivo++)
        {
            HttpPostedFileBase file = Request.Files[arquivo];

            //...

        }

そして今、それはうまくいきます。

于 2015-01-13T21:55:46.007 に答える
0

この属性 enctype="multipart/form-data" をフォームに追加します

- 編集

このオプションを追加する必要があります

parallelUploads: 10 parallelUploads オプションで指定された数のファイルのみがアップロードされます。parallelUploads の標準値は 2 のようです。

アップロードするファイルの数がわからないため、これは良い解決策ではありません

だから私は編集しました

  $("#btnDropzone").click(function () {

        var fileCount = myDropzone.files.length;
        alert(fileCount);
        alert(fileCount % myDropzone.options.parallelUploads);
        var loopsCount = fileCount / myDropzone.options.parallelUploads;

        if (fileCount % myDropzone.options.parallelUploads != 0) {
            loopsCount = loopsCount + 1;
        }

        alert(loopsCount);
        for (var i = 0; i < loopsCount ; i++) {
            alert(i);
            myDropzone.processQueue();
        }


    });
于 2013-08-16T12:41:19.140 に答える
0

次の解決策は、dropzone 3.7.3 で有効です。

これを修正するには、dropzone.js で次の行を変更します。

formData.append("" + this.options.paramName + (this.options.uploadMultiple ? "[]" : ""), file, file.name);

formData.append("" + this.options.paramName + (this.options.uploadMultiple ? "[" + _l + "]" : ""), file, file.name);

この縮小されていないバージョンを含めることを忘れないでください。

このパッチを github で Enyo に提案しようと思います。

于 2013-12-16T16:36:03.010 に答える