当前位置: 首页 > 知识库问答 >
问题:

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

邢炯
2023-03-14

我见过这个问题被问过几次,但没有一个答案是有用的。除非是用户权限问题,否则我不知道如何处理。

上下文

  • 创建了一个新文件(来自Lua应用,所以使用REST)
    • 用过吗?uploadType=可恢复
    • 从返回结果中,捕获了响应头['X-GUploader-UploadID']和响应['id'],两者的结果相同

    然后,尝试更新,我发现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中的异步网络调用]

    后果

    JZKOABMVQ2XDRSKR26VCKZKSCOR25VGKJ0GH05GLUV3U3GLUPUV3T5BBVQ5QQ0LNEOC0TP4VQ“,”变化“:起源,X源”,“日期”:“星期日,2021年5月30日20:5:17 GMT”,“ALT SVC”:“H3-29=”:443;MA=2592000,H3-T051=:(443);MA=2592000,H3-Q050=:(443);MA=2592000,H3-Q046= {“响应标题”:{“内容类型”:“文本/HTML;字符集= UTF-8”,“X-GuopADOR上载””:“ABG5-UXILY”:443;ma=2592000,h3-Q043=“:443;ma=2592000,quic=“:443”;ma=2592000;v=“46,43”,“内容长度”:“9”,“服务器”:“上传服务器”},“响应类型”:“文本”,“阶段”:“结束”,“字节估计”:9,“响应”:“未找到”,“名称”:“网络请求”,“字节转移”:9,“状态”:404,“url”:https://www.googleapis.com/upload/drive/v3/files/?uploadType=media

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

    “X-GUploader-UploadID”没有文档记录,但如果我使用response['id',结果是一样的。我已经验证了Google Drive(用于共享)中的id与响应中返回的id['id']相同。但是当我用它更新的时候,它说找不到。

    顺便说一句,只是试图通过重复使用简历URL或以下变体进行更新:

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

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

    使用补丁代替原始更新也有一个奇怪的效果——没有错误,但将文件更新为空。也许这就是秘密,但我必须弄清楚如何正确地通过身体?

共有1个答案

东方骏
2023-03-14

解决了的。我必须:

  • 使用Resubable进行更新(分两部分进行)
  • 在URL中添加文件ID(如文档所示)
  • 使用补丁进行元数据更新
  • 使用PUT进行内容更新

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

 类似资料:
  • 这是我收到的错误

  • 我正在使用google drive api来管理多个用户的一些文件。现在我想知道如何将一些文件的所有权转移给另一个用户。

  • 当观察驱动器更改时,我会收到带有新更改ID的通知。但是当我尝试使用:driveservice.changes().get(changeId)查询它时,我断断续续地得到404。我是不是做错什么了? 正在观看文件: 当观察文件更改时,如果是文件夹,我想知道添加到该文件夹的新文件,所以我希望从该文件夹添加/删除文件时,“x-goog-resource-state”将包含“add/remove”值,而“x

  • 下面是https://github.com/google/google-api-nodejs-client的代码。 一般问题:刷新令牌实际上如何与访问令牌一起工作? 背景:根据我的解释,每个访问令牌都有一个有限的时间跨度(~1小时)。因此,当用户第一次连接到我的服务器(服务器为用户身份验证提供了机制)时,服务器将收到有限生命期访问令牌和一次性刷新令牌。1小时后,访问令牌过期。 谢了!