我有一个角度驱动的站点,应允许用户选择本地系统文件并通过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()调用时必须以某种方式混合文件对象和“普通”数据...但我还没有找到任何关于这意味着什么的好例子
我做错了什么?