2015-09-29 4 views
0

Я получаю сообщение об ошибке «save conflict» при попытке загрузить несколько вложений в свой список, и из того, что я понимаю, это потому, что sharepoint по-прежнему обрабатывает последнее вложение, когда приходит новый.sharepoint upload attachment, save conflict error

Возможно, мне кажется, что это может быть связано с задержкой перед отправкой в ​​следующий файл, но это может также потерпеть неудачу, если указанный файл очень большой (слишком низкая задержка).

Это, как я отправляю вложения в данный момент:

Использование обещаний, $q

var elementPromises = []; 
angular.forEach(element.files, function(item){ 

    item = $scope.UploadAttachment(item).then(function(){}); 
    elementPromises.push(item); 
}); 

$q.all(elementPromises).then(function() { 
    // alert('all attachments saved'); 

}, function(reason) { 
    // alert('Failed: ' + reason); 

}, function(update) { 
    //alert('Got notification: ' + update); 
}); 

UploadAttachment функция:

$scope.UploadAttachment = function(file){ 
    var deferred = $q.defer(); 
    setTimeout(function() { 
     // deferred.notify('Saving attachments..'); 
     readFile(file).done(function (buffer, fileName) { 
      var saveFile = new Entry(buffer); 
      saveFile.$upload({ID: ID, filename: fileName}, function(u){ 
       console.log(u); 
       deferred.resolve('Success'); 
      }, function(error){ 
       console.log(error); 
       deferred.reject('Error'); 
      }); 
     }); 
    }, 1000); 
    return deferred.promise; 
}; 

ReadFile является функцией FileReader, от которым я буфер и имя файла, это то, что я загружаю в SharePoint.

Entry в New Entry (buffer) является $resource заводом, и имеет эту $upload функции:

 upload: { 
     url: "serverURL/_api/lists/getByTitle('listName')/items(:ID)/AttachmentFiles/add(FileName=':filename')", 
     method: "POST", 
     transformRequest: [], 
     processData: true, 
     headers: { 
      "accept": "application/json;odata=verbose", 
      "X-RequestDigest": function() {return $("#__REQUESTDIGEST").val()}, 
      "content-length": function() { 
       return arguments[0].data.byteLength; 
      } 
     } 
    } 

Как я уже сказал, это прекрасно работает для одного файла (или несколько маленьких), но при попытке загрузить несколько файлов с некоторым размером на них, я столкнулся с ошибкой сохранения.

Моя единственная идея до сих пор является некоторой задержкой, но я не знаю, где и как ее реализовать, также я боюсь, что этого будет недостаточно, никаких мыслей об этом?

ответ

0

Вам необходимо выполнить сериализацию вызовов REST и обновления файлов элементов. Следующий вызов не должен запускаться до завершения предыдущего. С вашими реализациями вызовы происходят параллельно, вызывая конфликт сохранения.