通过$ http.post将文件发布到MVC6应用程序

时间:2016-11-01 02:44:39

标签: angularjs asp.net-mvc asp.net-core-mvc

我有一个角度驱动的站点,应允许用户选择本地系统文件并通过POST将其上传到MVC6控制器操作。

角度代码如下所示:

$scope.checkFile = function() {
    $http.post('@dataUrl/@nameof(DataController.RedirectImport)', {
        uploadSource: $scope.importSource.source.value,
        uploadType: $scope.importDataType.value,
        positions: $scope.positions,
        agencyID: $scope.agencyID,
        countyID: $scope.importCounty.id,
        //file: $scope.importFile,
    }, {
        headers: {
            '@UseAngularXSRFExtension.XSRFFieldName': '@(af.GetTokens(this.Context).RequestToken)',
            'Content-Type': 'application/json; charset=utf-8',
        },
    })
    .then( function( respSucc ){
    }, function(respError) {
    });
};

MVC6动作定义如下:

[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult RedirectImport( [FromBody] ConfirmFileModel confirmModel )
{
}

这个工作正常......只要我不取消注释$ http.post参数的最后一行(文件:$ scope.importFile)

一旦我这样做,当触发RedirectImport操作方法时,confirmModel变为null。

$ scope.importFile设置如下:

$scope.fileNameChanged = function( element ) {
    var files = element.files;
    $scope.importFile = files[0];
    $scope.$apply();
};

并从输入元素触发:

<input type="file"
       accept=".zip,.dbf,.txt,.csv"
       class="form-control"
       onchange="angular.element(this).scope().fileNameChanged(this)" />

我尝试了内容类型的multipart / form-data,但这没有帮助。我遇到了一些提示,即在设置post()调用时必须以某种方式混合文件对象和“普通”数据...但我还没有找到任何关于这意味着什么的好例子

我做错了什么?

0 个答案:

没有答案