загрузить файл sharepoint, сохранить конфликтную ошибку

0

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

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

Вот как я загружаю вложения на данный момент:

Используя обещания, $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;
            }
        }
    }

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

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

Теги:
sharepoint

1 ответ

0

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню