我需要从
上传文件<input class="fromFileInput" id="VeryfyFromFileInput" type="file" fileread="fileContent" ng-click=uploadFile />
使用角度
控制器:
$scope.fileInformation = [];
$scope.uploadFile = function () {
$scope.fileModel = $('#VeryfyFromFileInput');
recordsService.passFile($scope.fileModel.context);
};
服务:
this.passFile = function (data) {
return $http({
method: 'POST',
url: url + "/GetFile",
data: data,
headers: { 'Content-Type': 'application/json' }
});
};
到ASP.NET MVC控制器
[HttpPost]
public void GetFile([FromBody] HttpRequestMessage file)
{
}
但我总是null,所以我必须使用哪种类型的参数而不是'HttpRequestMessage'?或者JS方面可能有问题吗?
答案 0 :(得分:1)
你无法通过线路传递bytedata作为application / json。一种解决方案是使用Form Data对象并将ajax调用作为multipart / formdata。使用以下Ajax调用。
$.ajax({
url: 'api/controller/action',
processData: false,
contentType: false,
type: 'POST',
data: formDataObject,
success: function () {
alert('yay!');
},
error: function () {
alert('nay :c');
}
});
我使用了angular-ui文件上传指令。我不确定你访问它的方式是否有效,如果有,那么你只需使用以下语法将文件添加到FormData
var formDataObject = new FormData();
formDataObject.append('file', $scope.fileModel;
在服务器上使用此代码段访问您的数据
var filesReadToProvider = await Request.Content.ReadAsMultipartAsync();
foreach (var stream in filesReadToProvider.Contents)
switch (stream.Headers.ContentDisposition.Name)
{
case "\"file\"":
byte[] fileData = await stream.ReadAsByteArrayAsync();
break;
default:
break;
}
}
有关如何将字节数组作为文件写入服务器的信息,请参阅:Write File to server
祝你好运!