ASP.Net Web Api和Angularjs:多个文件上传

时间:2019-04-01 03:26:03

标签: angularjs asp.net-mvc asp.net-web-api

我无法将上传的文件传递到控制器中。

这是我的控制器:

[System.Web.Http.HttpPost]
[System.Web.Http.Authorize(Roles = "Admin")]
public string UploadFile()
{
    var file = HttpContext.Current.Request.Files.Count > 0 ? HttpContext.Current.Request.Files[0] : null;

    if (file != null && file.ContentLength > 0)
    {
        var fileName = Path.GetFileName(file.FileName);

        var path = Path.Combine(
            HttpContext.Current.Server.MapPath("~/uploads"),
            fileName
        );

        file.SaveAs(path);
    }

    return Helpers.JsonHelper.Stringify(new { success = true });
}

这是Angularjs:

var uploadFileToUrl = function (file, uploadUrl, progressCB) {

    var token = $('input[name="__RequestVerificationToken"]').val();

    var form = new FormData();
    $(file).each(function (i, el) {
        form.append('file', el, el.name);
    })

    $http.post(uploadUrl, form, {
        headers: { "Authorization": "Basic " + token, "Content-Type": 'multipart/form-data' },
        uploadEventHandlers: {
            progress: progressCB
        }
    });
}

在调用uploadFileToUrl之前,将文件设置为setViewValue()以在上传(预览)之前显示图像。

因此,该指令中的某处有:

app.directive("selectNgFiles", function () {
    return {
        require: "ngModel",
        link: function postLink(scope, elem, attrs, ngModel) {
            elem.on("change", function (e) {
                var files = elem[0].files;
                ngModel.$setViewValue(files);
            })
        }
    }
});

但是我想这不会引起问题吧?

问题是HttpContext.Current.Request.Files始终为空,甚至以为我已经在formData中设置了它。为什么它总是空的?


注意

请查看附带的Chrome调试图像。

enter image description here enter image description here

0 个答案:

没有答案