Мне нужно было загрузить файл xml
на сервер с помощью angular
resource
. Я пытаюсь, но получаю ошибку, так как 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')
}
}]);
})();
Я согласен, но почему я не получаю никакого сообщения от «succces» или «error»? в моем параметре сохранения? – 3gwebtrain
И я получаю это в консоли, а не в колясках. 'Недопустимый код состояния HTTP 405' - что это значит? – 3gwebtrain
код состояния 405 означает, что используемый вами метод HTTP (т. Е. POST) не разрешен. Поэтому либо ваш сервер не поддерживает его, либо ваш клиент и сервер имеют разные домены, и в этом случае вашему клиенту должно быть разрешено делать запросы на кросс-поиск (CORS), см. Это: https://developer.mozilla.org/en-US/документы/Web/HTTP/Access_control_CORS – tombarti