Невозможно загрузить новый файл (<4 МБ) в SharePoint (MS Graph API) - PullRequest
0 голосов
/ 20 января 2020

Я пытаюсь загрузить вложение, полученное из Outlook, в папку внутри библиотеки документов SharePoint. Я просматриваю документы: https://docs.microsoft.com/en-us/graph/api/driveitem-put-content?view=graph-rest-1.0&tabs=http#http -request-to-upload-a-new-file

fetch(`https://graph.microsoft.com/v1.0/sites/${siteId}/drive/items/${parentId}:/${attachment.name}:/content`, { 
      method: 'PUT', 
      mode: 'cors',
      headers: new Headers({
        'Authorization': `Bearer ${accesToken}`, 
        'Content-Type': 'text/plain'
      }),
      body: attachment.contentBytes
    })

Все, что я получаю, это ошибка с кодом: -1, Microsoft.SharePoint.Client.InvalidClientQueryException

Я пытался установить тело запроса на выборку в виде простой строки, такой как "hello world", с целью тестирования и все еще получаю ту же ошибку.

Есть идеи?

Спасибо заранее


[РЕДАКТИРОВАТЬ] Я подозреваю, что я неправильно строю URL. Я не нашел документацию для параметра:

  • {item-id} Я предполагаю, что этот идентификатор является атрибутом parentReference.siteId папки.

Это право

1 Ответ

1 голос
/ 21 января 2020

Хорошо, поэтому после некоторого тестирования с помощью Microsoft Graph Explorer я обнаружил, что самый простой способ загрузить файл в папку SharePoint, находящуюся в библиотеке документов (в отличие от библиотеки документов root), - это иметь дело с это как диск, использующий конечную точку:

/drives/{drive-id}/items/{parent-id}:/{filename}:/content

(https://docs.microsoft.com/en-us/graph/api/driveitem-put-content?view=graph-rest-1.0&tabs=http#http -request-to-upload-a-new-file )

Чтобы получить идентификатор диска библиотеки документов, вы можете добавить к запросу графа параметр odata $ expand = drive как:

`https://graph.microsoft.com/v1.0/sites/${siteId}/lists?$expand=drive`

Затем, наряду с другими атрибутами целевой библиотеки документов, вы найдет объект «диск», который содержит идентификатор диска , связанный с библиотекой документов, в которую вы хотите загрузить файл. Таким образом, вы должны сделать запрос PUT следующим образом:


fetch(`https://graph.microsoft.com/v1.0/drives/${libraryDriveId}/items/root:/${folderDisplayName}/${nameOfFile}:/content`, {
      method: 'PUT', 
      mode: 'cors',
      headers: new Headers({
        'Authorization': `Bearer ${accesToken}`, 
        'Content-Type': 'text/plain'
      }),
      body: BINARY_STREAM_OF_DATA
    }).then( (response) => {
      if (!response.ok) return response.json().then((json) => {throw json});
      return response.json();
    }).then( (json) => {
      //do whatever
    }).catch( (err) => {
      console.error(err);
    })

libraryDriv

  • libraryDriveId исходит из запроса https://graph.microsoft.com/v1.0/sites/${siteId}/lists?$expand=drive
  • /root:/${folderDisplayName} означает, что папка, на которую вы нацеливаетесь внутри библиотеки документов, находится в «root:» (root библиотеки документов), за которым следует displayName папки, в которую вы хотите загрузить файл в
  • nameOfFile - имя файла, который вы хотите загрузить
...