2017-01-02 2 views
0

Я пытаюсь загрузить файл из HTML-формы в виде вложения элемента списка в список SharePoint 2013.Как загрузить вложение в блочном виде в SharePoint с помощью REST API с помощью AngularJS?

Теперь я могу загрузить каждый файл, но файлы .txt не повреждены, поэтому тогда можно открыть только файлы .txt.

Когда пользователь представит свою форму, у меня есть объект со следующими свойствами: enter image description here

Затем в коде, я это читать этот блоб данные:

var fileData = null; 

    // Get a content from url with blob: ....... 
    $http.get(fileInfo.url, { 
     headers: { 
      "Accept": "application/xml;odata=verbose", 
      "X-Requested-With": "XMLHttpRequest", 
     } 
    }).then(function (data) { 
     fileData = data.data; 

     // Upload a file 
     $http.post(siteUrl + "/_api/web/lists/getbytitle('" + listName + "')/items(" + itemId + ")/AttachmentFiles/add(FileName='" + fileInfo.name + "')", fileData, { 
      headers: { 
       "Accept": "application/json;odata=verbose", 
       "X-Requested-With": "XMLHttpRequest", 
       "X-RequestDigest": document.getElementById('__REQUESTDIGEST').value 
      } 
     }).then(function (data) { 
      console.log("OK"); 
      successFunction(data); 
     }, function (data) { 
      console.log("NOT OK"); 
      errorFunction(data); 
     }); 
    }, function (data) { 
     alert("Error"); 
    }); 

И, вероятно, это место в чем проблема. Когда пользователь загружает файл .txt, переменная fileData представляет собой строку с точно такой же, как в этом .txt-файле. Но если пользователь загружает файл .docx (MS Word), строка в переменной fileData выглядит примерно так (только начало):

PK! ߤ lZ [Content_Types] .xml ( n 0E Ub 袪 * > -R {V Ǽ QU ↵l "% 3 3Vƃ ښ l w% = ^i7 + -d & 0 A 6 l4 L60 # Ò S↵O X * V $ z 3 3 % p) O^

Так что, возможно, кодирующий Плохая спецификация типа данных? Я не знаю.

Я буду очень благодарен за помощь. спасибо много советов.

+0

MimeType из .docx файлов 'приложение/vnd.openxmlformats-officedocument.wordprocessingml.document' – briosheje

+0

Чтобы получить двоичные файлы, используйте 'responseType:" blob "или' responseType: "arraybuffer'. Для получения дополнительной информации см. [Справочник по API-интерфейсу MDN - responseType] (https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/responseType). – georgeawg

ответ

0

Чтобы получить его работу вам необходимо указать responseType: "arraybuffer" для какGET и POST запросов как это:

$http.get(fileInfo.url, { 
    responseType: "arraybuffer", 
    headers: { 
     "Accept": "application/xml;odata=verbose", 
     "X-Requested-With": "XMLHttpRequest", 
    } 
}) 

, а затем для POST запроса установки Content-Type в неопределенный и перезаписать transformRequest свойства так Угловой не кодировать массив в Json

$http.post(siteUrl + "/_api/web/lists/getbytitle('" + listName + "')/items(" + itemId + ")/AttachmentFiles/add(FileName='" + fileInfo.name + "')", fileData, { 
     headers: { 
      "Accept": "application/json;odata=verbose", 
      "Content-Type": undefined, 
      "X-Requested-With": "XMLHttpRequest", 
      "X-RequestDigest": document.getElementById('__REQUESTDIGEST').value 
     }, 
     transformRequest: angular.identity, 
     responseType: 'arraybuffer' 
}) 
Смежные вопросы