【问题标题】:Pass file to asp.net controller using angular使用角度将文件传递给 asp.net 控制器
【发布时间】:2016-10-19 17:31:04
【问题描述】:

我需要从

上传文件
<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)
    {

    }

但我总是为空,所以我必须使用哪种类型的参数而不是'HttpRequestMessage'?或者可能是 JS 方面的问题?

【问题讨论】:

  • 你有没有检查data是否包含任何东西?

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


【解决方案1】:

您不能通过网络将字节数据作为应用程序/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;

在服务器上使用这个 sn-p 访问您的数据

 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

祝你好运!

【讨论】:

  • 你能再描述一下吗
  • 关于 filesReadProvider。我不想读取文件的内容,我只需要在我的目录中创建相同的文件(在服务器上)
  • 我已经更新了我的答案。如果有帮助,请采纳并投票。祝你好运!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-02
  • 1970-01-01
  • 2011-12-16
  • 2010-09-14
相关资源
最近更新 更多