sharepoint上传附件,保存冲突错误

时间:2015-09-29 07:54:12

标签: javascript angularjs sharepoint

尝试将多个附件上传到我的列表时出现“保存冲突”错误,据我所知,这是因为当新的附件进入时,sharepoint仍在处理最后一个附件。

我认为可以帮助在发送下一个文件之前有某种延迟,但如果所述文件非常大(延迟太短),这也可能失败。

这就是我目前上传附件的方式:

使用promises,$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是一个文件阅读器功能,从我获得缓冲区和文件名,这是我上传到SharePoint的内容。

Entry中的{p> 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;
            }
        }
    }

正如我所说,这适用于一个文件(或几个小文件),但是当尝试上传多个文件大小时,我遇到了保存冲突错误。

到目前为止,我唯一的想法是某种延迟,但我不知道在哪里或如何实施它,我也担心这还不够,对此有什么看法?

1 个答案:

答案 0 :(得分:0)

您需要序列化项目更新和项目文件附件REST调用。下一个呼叫必须在前一个呼叫完成之前触发。您的实现调用并行发生,导致保存冲突。