【问题标题】:ASP.NET MVC 3 - File upload through AngularJSASP.NET MVC 3 - 通过 AngularJS 上传文件
【发布时间】:2012-12-25 23:47:45
【问题描述】:

我在我的页面中使用AngularJS,我有一个疑问:当我使用我的表单发布时,如何将一些选定的文件传递给我的 ASP.NET MVC 3 控制器? 看看这个:

我的表格:

<form enctype="multipart/form-data" ng-controller="FilesController" ng-submit="submitingForm()">
    <div>
        Choose the file:
        <input type="file" onchange="angular.element(this).scope().setSelectedFile(this)" />
    </div>

    <input type="submit" value="Confirm" />
</form>

还有 AngularJS 控制器:

var module = angular.module('application', []);

(function (ang, app) {

    function FilesController($scope, $http) {

        $scope.setSelectedFile = function (element) {
            $scope.$apply(function($scope) {
                $scope.selectedFile = element.files[0];
            });
        };

        $scope.submitingForm = function() {

            $http.post(url, ???????).success(function() {
                // How to pass that selected file for my ASP.NET controller?
            });
        }
    }

    app.controller("FilesController", FilesController);
})(angular, module);

谢谢!!!

【问题讨论】:

    标签: asp.net-mvc-3 file-upload angularjs


    【解决方案1】:

    我对 AngularJS 不是很熟悉,但是如果您尝试使用 AJAX 请求上传文件,您可能会忘记它。那不是可以做的事情。如果您想将文件异步上传到服务器,可以使用HTML5 File API。有一个专门用于此的entire section

    如果您的客户端浏览器不支持 HTML5 文件 API,您可以使用文件上传插件,例如 FineUploaderUploadify(还有很多其他插件,只需 google)。

    【讨论】:

    • 谢谢,我正在尝试使用这些插件,并且非常成功!
    • “您正在尝试使用 AJAX 请求上传文件,您可以忘记它”,我只是在 MVC4 中使用 angular 使用 github.com/danialfarid/angular-file-upload
    【解决方案2】:

    我的方法是使用FormData

    像这样创建一个输入标签。

    <input id="imgInp" type="file" aria-label="Add photos to your post" class="upload" name="file" onchange="angular.element(this).scope().LoadFileData(this.files)" multiple="" accept="image/*" style="margin-top: -38px; opacity: 0; width: 28px;">
    

    并在您的 Angular 控制器中创建一个方法 LoadFileData(inputFiles),如下所示:

     var formData = new FormData();
    
     $scope.LoadFileData = function (files) {
            for (var file in files) {
                formData.append("file", files[file]);
            }
        };
    

    现在在 formData 变量中,您将拥有上传的文件。只需将其发送到 asp.net mvc 控制器即可。

    $scope.submit = function () {
            $http.post("/YourController/Method", formData, {
                withCredentials: true,
                headers: { 'Content-Type': undefined },
                transformRequest: angular.identity
            }).success(function (response) {
          }
    

    在服务器端,Asp.NET MVC 4 控制器你将拥有文件

    var files = Request.Files;
    

    【讨论】:

    • 欢迎@user3814490。 FormData 确实是上传文件的好方法。
    • 是的,我保存在数据库和二进制数组中。
    猜你喜欢
    • 2011-06-22
    • 1970-01-01
    • 2012-01-20
    • 1970-01-01
    • 2021-12-10
    • 1970-01-01
    • 2012-08-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多