【问题标题】:404 on update file with fileID on google drive api在谷歌驱动器 api 上使用 fileID 更新文件时出现 404
【发布时间】:2021-08-18 06:57:40
【问题描述】:

我已经看到这个问题被问了几次,但没有一个答案有帮助。除非是“用户权限”问题,否则我不知道如何处理。

上下文

  • 创建了一个新文件(来自 Lua 应用程序,因此使用 REST)
    • 使用 ?uploadType=resumable
    • 从返回中,捕获 responseHeaders['X-GUploader-UploadID'] 和 response['id'],两者的结果相同
  • 文件存在,可以在 Google Drive 上查看

然后,尝试更新,我得到 404 Not Found。这是 Lua 代码:

代码

local url = "https://www.googleapis.com/upload/drive/v3/files"

[userStateID 有上面捕获的 id]

url = url.."/".._G.lobal.userStateID.."/?uploadType=media"
url = url.."/?uploadType=media&upload_id=".._G.lobal.userStateID

[我尝试了上述两种变体,结果相同]

resbody = stuff

local headers = {['Content-type'] = "application/json",
  Authorization=oauth,
  ['user-agent'] = "SilkRoad ".._G.VERSION,
  ['X-Upload-Content-Type']="application/text; charset=utf-8",
  ['Content-Length']=string.len(resbody)
}
local params = {headers=headers,body=resbody}
network.request(url, "PUT", uploadListener, params )

[lua 中的异步网络调用]

结果

{"responseHeaders":{"Content-Type":"text/html; charset=UTF-8","X-GUploader-UploadID":"ABg5-UxILyJZKOABmdvQ2tDrsXrRTHY-pljfWSk67vcKyzcSoR28BoMjHG5gFi0a3GLUPVSU3T5bBvqlnK5qG0-lNEOc0Tp4vQ","Vary"" Origin, X-Origin","Date":"Sun, 30 May 2021 20:52:17 GMT","Alt-Svc":"h3-29=":443"; ma=2592000,h3-T051=" :443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=" :443"; ma=2592000; v="46,43"","Content-Length":"9","Server":"UploadServer"},"responseType":"text","phase":"end ","bytesEstimated":9,"response":"未找到","name":"networkRequest","bytesTransferred":9,"status":404,"url":"https://www.googleapis. com/upload/drive/v3/files/?uploadType=media&upload_id=ABg5-UxG8zBq7ARLKAd7cE0FB2z9NG1Sv8gKlnH_QjDqluSOaun5oRRI3h7fXHHn1KqEW1DolBkMmh4GlgwgOGl9NOc","isError":false,"requestId":""

没有“用户”可以授予权限。但也许要使用这种机制,要更新我的应用程序创建的任何文件,我必须要求用户转到他们的云端硬盘并更改权限?这听起来不对。也许我需要在元数据上加上一个标志?

'X-GUploader-UploadID' 没有记录,但如果我使用 response['id'],结果相同。我已验证 Google Drive(用于共享)中的 id 与 response['id'] 中返回的 id 相同。但是当我使用它进行更新时显示未找到。

顺便说一句,只是尝试通过重复使用简历 URL 或此变体来更新:

https://www.googleapis.com/upload/drive/v3/files?upload_id=...

有一个奇怪的结果:没有错误,但文件没有更新。

在原始更新上使用 PATCH 而不是 PUT 也有一个奇怪的效果——没有错误,但将文件更新为空。所以也许这就是秘密,但我必须弄清楚如何正确传递身体?

【问题讨论】:

    标签: lua google-drive-api http-status-code-404


    【解决方案1】:

    解决了。我不得不:

    • 使用 resumable 进行更新(分两部分进行)
    • 在 URL 中添加 fileID(如文档所示)
    • 使用 PATCH 更新元数据
    • 使用 PUT 进行内容更新

    当然可以使用更好的文档或示例,至少对于 REST API。

    【讨论】:

      猜你喜欢
      • 2018-09-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-10
      • 2020-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多