使用angular将文件传递给asp.net控制器

时间:2016-10-19 17:31:05

标签: javascript c# asp.net angularjs asp.net-mvc

我需要从

上传文件
<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方面可能有问题吗?

1 个答案:

答案 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

祝你好运!