调试时AngularJS 1.5文件上载在IE / Chrome中运行

时间:2018-08-24 00:05:59

标签: angularjs asp.net-web-api file-upload binary

我已经编写了代码,该代码将从angularjs中获取base64数据并将其传递到.Net中进行二进制转换。我的系统运行正常。我已将代码部署到服务器中。并且字节数组变为NULL,但警报消息已成功执行。但是,如果我将调试器放在控制台中,它可以完美地工作,并且可以控制字节内容。不明白我做错了什么。首先,我在浏览时将fileobject放入rootscope变量中。然后点击“上传”按钮,将文件解析并保存到数据库中。请帮我。 HTML代码

<div class="col-sm-4">  
<input filestyle="" file-model = "signatureImage" name="signatureImage" type="file"  accept=".png" />                                   
 </div>
<div class="col-sm-2">
<button type="button" ng-click="apc.uploadFile()" class="btn btn-info btn-xs"><span class="icon-cloud-upload mr"></span>Upload
</button>
</div>

在Angularjs中,

(function () {
    'use strict';

    angular
        .module('ba')
        .directive('fileModel', ['$parse','$rootScope', function ($parse, $rootScope) {           
        return {
            restrict: 'A',
            link: function (scope, element, attrs) {
                var model = $parse(attrs.fileModel);
                var modelSetter = model.assign;               
                element.bind('change', function () {                    
                    scope.$apply(function () {                        
                        var UserInfoID = sessionStorage.getItem('UserInfoId'); 
                        var DataVariable = "signatureImage_" + UserInfoID;                        
                        $rootScope[DataVariable] = element[0].files[0];
                       //modelSetter(scope, element[0].files[0]);
                    });
                });
            }
        };
    }]);
})();
 
(function () {
    'use strict';

    angular
        .module('ba')
        .controller('APC', APC);

    APC.$inject = ['$http', '$scope', 'ngDialog', 'DTOptionsBuilder', '$filter', '$rootScope', '$timeout', '$localStorage'  ];
    function APC($http, $scope, ngDialog, DTOptionsBuilder, $filter, $rootScope, $timeout, $localStorage) {

  vm.uploadFile= function () {
            var UserInfoID = sessionStorage.getItem('UserInfoId');
            var DataVariable = "signatureImage_" + UserInfoID;
            var file = $rootScope[DataVariable];
            var UserName = vm.NewPersonInfo.UserName;            
            var reader = new FileReader();            
            reader.readAsDataURL(file);
            var fileData = reader.result;
            fileData = fileData.replace("data:image/png;base64,", "");           
            var uploadData = {
                    Name: file.name,
                    FileType: fileData,
                    UserInfoID: UserName
                }
            $http.post('api/AP/USA', uploadData)
                    .then(
                    function (response) {
                        if (response != null && response.data != null) {
                            alert("Digital Successfully Uploaded.");
                        }
                        else {
                            alert("Digital Successfully Upload Failed!!!");
                        }
                    });
        };
 }
})();

.net代码如下

[HttpPost]
        public DataSet USA(apc.ImageModel imageModel)
        {
            ResultSet dsSaveDoc = null;

            imageModel.Bytes = Convert.FromBase64String(imageModel.FileType);
            imageModel.FileType = "image/png";
//DB Calling
}

现在,这里imageModel.Bytes在不放置调试器的情况下变为NULL,如果我将调试器放置在服务器中,则工作正常。

请帮助我。...

0 个答案:

没有答案