上传 `XML` 文件未按预期工作

Uploading a `XML` file not working as per expected

我需要使用 angular resourcexml 文件上传到服务器。我正在尝试,但出现错误 Uncaught TypeError: server.uploadXML.post is not a function

有人纠正我或告诉我正确的处理方法吗? 为了完成这个过程,我将 controllerdirective 与我的 html.

一起使用

我是新手,有什么不对的地方还请指教。

这是我的控制器函数://我从指令调用

$scope.uploadFile = function ( newFile, id ) {

                 var fileData = new FormData();
                 fileData.append('file', newFile[0], newFile[0].name);
                // console.log("new file", "$scope.packageId", $scope.packageId, "$scope.contractorId", $scope.contractorId, newFile, info );

                server.uploadXML.post({

                    packageId: $scope.packageId, 
                    contractorId : $scope.contractorId,
                    contractId : id

                }, { save: {
                    type: 'POST',
                    data: fileData,
                    cache: false,
                    dataType: 'json',
                    processData: false, 
                    contentType: "application/octet-stream", 
                    success : function ( data ) {

                    },
                    error : function ( error ) {

                        cosole.log( error );

                    }

                }} ); 

            }

这是我的指令:

//file upload handled here

var uploadFileDirective = function () {

    return {

        restrict : 'C',

        scope : {

            info:"=",
            upload:"="

        },

        link:function ( scope, element, attrs ) {

            element.on('change', function ( event ) {

                var files = event.target.files;
                scope.upload(files, scope.info ); //calling controller

            })
        }

    }

}

angular.module("tcpApp")
.directive("uploadFileDirective", uploadFileDirective);

这是我的 HTML :

<div class="row row3">
                            <div class="cell">
                                <a ng-href="">Contract Details</a>
                                <span class="fileUpload">
                                    Upload Report 
                                    <!-- hanlded by directive by class name  -->
                                    <input info="contractor.Id" upload="uploadFile" class="uploadField upload-file-directive" type="file" />
                                </span>
                            </div>
                        </div>

                    </div>

我正在使用我的 server.js 文件上传我的文件,这里是 server.js 文件:

(function () {

    "use strict";

    angular
        .module("tcpApp")
        .factory("server", ['$resource', function ($resource) {

            var base = 'http://azvsptcsdev02:678/_vti_bin/CPMD.WEBSERVICE/ProjectInfoService.svc/';

            return {

                subPage : $resource( base + 'GetSubProjects/:id'),

                splash : $resource( base + 'GetProjectDetails'),

                projectSummary : $resource( base  + 'GetProjectByID/:id', {id : '@id'}), //at the top on the summary page

                contractorsList : $resource( base + 'Contracts/:projectId/:subProjectId/:phaseId/:disciplineId'), //left side list of contractos

                contractorInfo : $resource( base + 'Projects/:projectId/:subProjectId/:contractId/:disciplineId/:staticId'), //summary page getting contractor info

                allProjectList : $resource( base + 'GetAllProjects'), //getting all project for all project page

                allSubProjects : $resource( base + 'GetAllSubProjects/:packageId'),

                allContracts : $resource( base + 'AllContracts/:packageId/:contractorId'),

                uploadXML   : $resource( base + 'UploadContract/:packageId/:contractorId/:contractId')


            }

        }]);

})();

在您的 server.js 文件中,当您执行

uploadXML   : $resource( base + 'UploadContract/:packageId/:contractorId/:contractId')

$resource returns 有以下方法可用:

{ 'get':    {method:'GET'},
  'save':   {method:'POST'},
  'query':  {method:'GET', isArray:true},
  'remove': {method:'DELETE'},
  'delete': {method:'DELETE'} };

参见 angular documentation

所以 server.uploadXML.post 确实没有定义(这就是你得到错误的原因)。尝试使用 server.uploadXML.save 而不是对应于 http POST 方法。