0

我正在尝试将从 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 -新文件

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} 我假设这个 ID 是文件夹的parentReference.siteId属性。

那正确吗?

4

1 回答 1

1

好的,所以在使用 Microsoft Graph Explorer 进行一些测试后,我发现将文件上传到位于文档库(不同于根文档库)中的 SharePoint 文件夹的最简单方法是将其作为驱动器使用端点:

/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

为了获取文档库的drive-id,您可以将 odata 参数 $expand=drive 附加到图形查询中,如下所示:

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

然后,与目标文档库的其他属性一起,您将找到“驱动器”对象,该对象包含与要将文件上传到的文档库关联的驱动器 ID 。因此,您将发出 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);
    })

图书馆驱动器

  • libraryDriveId来自https://graph.microsoft.com/v1.0/sites/${siteId}/lists?$expand=drive请求
  • /root:/${folderDisplayName}表示您在文档库中定位的文件夹位于“root:”(文档库的根目录)下,后跟displayName您要将文件上传到的文件夹的
  • nameOfFile是您要上传的文件的名称
于 2020-01-20T21:45:56.313 回答