404在谷歌驱动器api上用fileID更新文件



这个问题我已经问过好几次了,但没有一个答案是有用的。除非这是一个"用户权限"问题,在这种情况下,我不知道如何处理。

上下文

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

然后,尝试更新,我得到404未找到。这是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":{"内容类型":"text.html;字符集=UTF-8","X-GUploader-UploadID":"ABg5-UxILyJZKOABmdvQ2tDrsXrRTHY-pljfWSk67vcKyzcSoR28BoMjHG5gFi0a3GLUPVSU3T5bBvqlnK5qG0-lNEOc0Tp4vQ","变化":"来源,X来源","日期":"星期日,2021年5月30日20:52:17 GMT","Alt-Svc":"h3-29=":443";ma=2592000,h3-T051=":445";;ma=2592000,h3-Q050=":443〃;;ma=2592000,h3-Q046=":443〃;;ma=2592000、h3-Q043=":443〃;;ma=2592000,quic=":443〃;;ma=2592000;v=";46,43〃&"内容长度":"9〃"服务器":"UploadServer"}"responseType":"文本"阶段":"结束"字节估计":9;响应":"未找到"name":"networkRequest"字节转移":9;状态":404;url":"https://www.googleapis.com/upload/drive/v3/files/?uploadType=media&upload_id=ABg5-UxG8zBq7ARLKAd7cE0FB2z9NG1Sv8gKlnH_QjDqluSOaun5oRRI3h7fXHHn1KqEW1DolBkMmh4GlgwgOGl9NOc"isError":false;requestId":"lt;JSON不支持类型"userdata">quot;}

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

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

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

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

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

在原始更新中使用PATCH而不是PUT也会产生奇怪的效果——没有错误,但会将文件更新为空。也许这就是秘密,但我必须弄清楚如何正确通过身体?

已解决。我不得不:

  • 使用可恢复文件进行更新(分两部分进行(
  • 在URL中添加文件ID(如文档所示(
  • 使用PATCH进行元数据更新
  • 使用PUT进行内容更新

当然可以使用更好的文档或示例,至少对REST API来说是这样。

最新更新