无法使用可恢复方法更新Google云端硬盘中的文件

问题描述 投票:0回答:1

我一直在尝试学习如何使用Google Drive API通过可恢复的会话来更新Google Drive中的文件。

我收到了对上载内容请求的“禁止”回复。

您能帮助我找到丢失或滥用的步骤吗?

  1. [用户被授予权限:

    • drive.metadata
    • 驱动器
    • drive.file
  2. 执行创建可恢复会话的请求:

    PATCH'https://www.googleapis.com/upload/drive/v3/files/1XIU63B-U8b9Fe1_UFFVvd7OOdS_ANqAj?uploadType=resumable

  3. 检索会话网址:

    https://www.googleapis.com/upload/drive/v3/files/1XIU63B-U8b9Fe1_UFFVvd7OOdS_ANqAj?uploadType=resumable&upload_id=AEnB2Uqew ...

  4. 通过使用可恢复会话发送内容:

    PUThttps://www.googleapis.com/upload/drive/v3/files/1XIU63B-U8b9Fe1_UFFVvd7OOdS_ANqAj?uploadType=resumable&upload_id=AEnB2Uqew...

    我在文档中没有发现与此步骤相关的任何特定内容,因此我使用常规的上传文档https://developers.google.com/drive/api/v3/manage-uploads#upload-resumable更新“多个块”中的文件

  5. 我得到403错误状态代码,带有“禁止”原因,标头带有upload_id:

    X-GUploader-UploadID:AEnB2Uqewr ...

google-api google-drive-api
1个回答
0
投票
  • 您想使用可恢复的上传方法更新Google云端硬盘中的现有文件。

如果我的理解正确,那么这个答案如何?请认为这只是几个可能的答案之一。

[很遗憾,从您的问题中,我无法理解您的测试的详细要求正文。因此,我无法复制您的情况。因此,在这个答案中,我想提出一个示例流程,以使用可恢复的上传更新现有文件。

示例情况:

在此答案中,作为一种示例情况,它假定Google云端硬盘中的文本文件通过具有多个块的断点续传进行更新。作为请求方法,我使用curl命令。

我为2个块准备了2个文件。作为测试情况,上载了262,144字节和37,856字节的2个块。因此,总上传大小为300,000字节。

使用断点续传时,请注意以下几点。

将块的数据添加到请求正文中。除了完成上传的最后一个块以外,创建大小为256 KB(256 x 1024字节)倍数的块。保持块大小尽可能大,以便上载高效。 Ref

使用断点续传更新文件的流程:

1。发起可恢复的上传会话

[使用可恢复的上传创建要上传的会话。在这种情况下,现有文件将更新,因此端点为PUT https://www.googleapis.com/upload/drive/v3/files/[FILE_ID]?uploadType=resumable。但重要的是,请使用PATCH的方法代替PUT。使用PUT时,location不包含在响应头中。我认为官方文件可能不正确。

$ curl -X PATCH -i \
  -H "Authorization: Bearer ###accessToken###" \
  "https://www.googleapis.com/upload/drive/v3/files/[FILE_ID]?uploadType=resumable"

如果要以分段上传的形式更新文件,请使用以下示例命令。在这种情况下,文件名将被更改。

$ curl -X PATCH -i \
  -H "Authorization: Bearer ###accessToken###" \
  -H "Content-Type: application/json; charset=UTF-8" \
  -d '{"name":"updatedFilename.txt"}' \
  "https://www.googleapis.com/upload/drive/v3/files/[FILE_ID]?uploadType=resumable"
  • [当运行上述示例命令时,返回200 OK,并且响应标头包括location,类似于location: https://www.googleapis.com/upload/drive/v3/files/[FILE_ID]?uploadType=resumable&upload_id=###。为了上载数据,将location用作端点。

2。上传第一个块

curl -X PUT -i \
  -H "Content-Length: 262144" \
  -H "Content-Range: bytes 0-262143/300000" \
  -H "Content-Type: text/plain" \
  -F "[email protected]" \
  "https://www.googleapis.com/upload/drive/v3/files/[FILE_ID]?uploadType=resumable&upload_id=###"
  • 运行此curl命令时,返回308 Resume Incomplete。这样,发现可以正确上载该块。

3。上载第二个块(这是此示例流的最后一个块。)

curl -X PUT -i \
  -H "Content-Length: 37856" \
  -H "Content-Range: bytes 262144-299999/300000" \
  -H "Content-Type: text/plain" \
  -F "[email protected]" \
  "https://www.googleapis.com/upload/drive/v3/files/[FILE_ID]?uploadType=resumable&upload_id=###"
  • 运行此curl命令时,返回200 OK,并且还返回文件元数据。这样,发现可以正确完成可恢复的上传。

注意:

  • 在这种情况下,文件将被覆盖更新。因此,请注意这一点。
  • [在我的环境中,即使将PUT修改为PATCH以上传块,我也可以确认上述流程是否有效。
    • 如果在您的环境中发生错误,请尝试测试此修改。
  • 关于上述示例情况,如果要上传一个300,000字节的块,请使用-H "Content-Length: 300000" -H "Content-Range: bytes 0-299999/300000"

参考:

如果我误解了你的问题,而这不是你想要的方向,我深表歉意。

© www.soinside.com 2019 - 2024. All rights reserved.