【问题标题】:How to upload a large file to OneDrive using Microsoft Graph如何使用 Microsoft Graph 将大文件上传到 OneDrive
【发布时间】:2020-11-07 03:38:26
【问题描述】:

creating an upload session 时,我收到404 - File name not provided in url 响应。

我的请求看起来像(没有任何正文):

POST /v1.0/drives/{drive-id}/items/{item-id}/createUploadSession
Authorization: bearer <token>
Content-Type: application/json

此问题仅出现在消费者 OneDrive 上,OneDrive for Business 可以正常工作。

【问题讨论】:

  • 你为{item-id}传递了什么?
  • @Marc 我正在传递文件 ID,该文件已经上传,因此它有自己的文件 ID,根据上述请求,我想修改该文件。问题仅在于个人帐户,对于企业帐户,这可以正常工作。
  • 您是否尝试过使用/root:/{item-path}:/ 方法代替/items/{item-id}?没关系,但也值得尝试/me,因为消费者 OneDrive 只有一个 drive(即/me/drive/items/{itemId})。
  • 我对自己的驱动器文件使用了/root:/{item-path}: 方法。一些用户与我共享了一个文件夹,我已将其添加到我的 One-drive 中。无论我想在这个需要驱动器 ID 访问的共享目录中进行更改的帐户类型,因此无法使用该路径。
  • 您仍然可以使用路径:/drives/{id}/root:/{path}:/,但这不太可能是您的问题。听起来您正试图将文件上传到某人与您共享的文件夹中。这可能是不可能的。

标签: microsoft-graph-api onedrive


【解决方案1】:

它对我有用:-

POST - https://graph.microsoft.com/v1.0/me/drive/root:/filename.txt:/createUploadSession

In Headers:-
Content-Type : application/json
Authorization: Bearer EwCIA8l6BAAUO...9chh8cJaAg==

In Body:- 
{
  "item": {
    "@odata.type": "microsoft.graph.driveItemUploadableProperties",
    "@microsoft.graph.conflictBehavior": "rename",
    "name": "filename.txt"
  }
}

【讨论】:

    【解决方案2】:

    我可以使用此 URL 在个人帐户中上传文件以创建存储会话:

    https://graph.microsoft.com/v1.0/me/drive/items/{folderID}:/{fileID}:/createUploadSession

    var config = {
      method: 'post', 
    url: 'https://graph.microsoft.com/v1.0/me/drive/items/{folderID}:/{fileID}:/createUploadSession',
      headers: { 
        'Content-Type': 'application/json', 
        'Authorization': 'Bearer
    } 
    

    回复:

    {
        "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#microsoft.graph.uploadSession",
        "expirationDateTime": "2020-11-06T14:25:27.662Z",
        "nextExpectedRanges": [
            "0-"
        ],
        "uploadUrl": {url}
    }
    

    然后:

    要创建文件,您需要发送一个 PUT 请求 {uploadUrl} 您在响应中得到的。

    【讨论】:

      【解决方案3】:

      我从未遇到过您的特定情况,但我怀疑这是因为通过 OneDrive for Business 与您共享的文件夹与您自己的 OneDrive for Business 属于同一租户。但是,当您从消费者 OneDrive 访问共享文件夹时,您实际上是在完全独立的租户中访问驱动器。

      由于使用我建议的root:/{path}:/ 方法有效,因此听起来这种情况可能会导致API 从{itemId} 确定文件信息时出现一些问题。我希望确认这一点,以便以后更新文档。

      【讨论】:

      • 好的,但是请求POST /v1.0/drives/{drive-id}/items/{item-id}/createUploadSession 对我自己的文件以及共享文件的个人帐户都不起作用。我得到的错误是“url中未提供文件名”。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多