2015-09-03 3 views
1

Мне нужно было загрузить файл xml на сервер с помощью angularresource. Я пытаюсь, но получаю ошибку, так как Uncaught TypeError: server.uploadXML.post is not a functionЗагрузка файла `XML` не работает как ожидалось

любой из нас правильно меняет или покажет мне правильный способ справиться с этим? , чтобы сделать этот процесс, я использую controller и directive с моим 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') 


      } 

     }]); 

})(); 

ответ

1

В файле server.js, когда вы делаете

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

$resource возвращается на унизительных со следующими доступными методами:

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

См угловую documentation.

Так что server.uploadXML.post действительно не определен (вот почему вы получаете сообщение об ошибке). Попробуйте использовать server.uploadXML.save, что соответствует методу http POST.

+0

Я согласен, но почему я не получаю никакого сообщения от «succces» или «error»? в моем параметре сохранения? – 3gwebtrain

+0

И я получаю это в консоли, а не в колясках. 'Недопустимый код состояния HTTP 405' - что это значит? – 3gwebtrain

+0

код состояния 405 означает, что используемый вами метод HTTP (т. Е. POST) не разрешен. Поэтому либо ваш сервер не поддерживает его, либо ваш клиент и сервер имеют разные домены, и в этом случае вашему клиенту должно быть разрешено делать запросы на кросс-поиск (CORS), см. Это: https://developer.mozilla.org/en-US/документы/Web/HTTP/Access_control_CORS – tombarti