使用Google Drive API更新权限时出现500错误

Nik*_*war 10 google-api google-api-client google-drive-api

当我尝试授予任何文件的访问权限时,我收到500错误.当文件与某人共享时,我不想发送电子邮件.我想停止通知电子邮件.

  Insert insert = service.permissions().insert(fileId, newPerm);
  insert.setSendNotificationEmails(false);
  newPerm = insert.execute();


        500 OK
            {
            "code" : 500,
            "errors" : [ {
            "domain" : "global",
            "message" : "Internal Error. User message: \"An internal                                                     error has occurred which prevented the sharing of these item(s): fileame\"",
           "reason" : "internalError"
            } ],
          "message" : "Internal Error. User message: \"An internal error has occurred which prevented the sharing of these item(s): filename\""
            }
Run Code Online (Sandbox Code Playgroud)

感谢任何建议.

eve*_*Mcc 5

我开始遇到这个问题,但设法通过在文件推送和权限插入之间引入暂停来解决它.

我的'工作流'(使用http帖子而不是休息客户端):

  1. 推送文件.
  2. 从Google云端硬盘API中获取fileId.
  3. 使用fileId将有效负载发送到插入权限

我总是在第3步获得500'内部错误'; 该文件始终被成功推送.

在我最初的调试,通过步进的时候,我想尝试,并再次推动同一个文件到谷歌,它会返回相同的fileid上使用相同的文件以前的尝试(因此谷歌云端硬盘API必须recongise文件是一样的).

但是当我尝试使用相同的fileId插入(仍在调试)后续权限时,它总是成功的.

所以我刚刚在文件推送和权限插入之间引入了一个20秒的暂停,这已经完成了这个技巧(因为时间在我的应用程序中并不重要).

Google云端硬盘中必定存在某种复制延迟(或"time_til_permissions_can_be_inserted").很难相信,因为它是谷歌,但嘿.


wes*_*cpy 5

在这个问题的另一个答案中,@ eversMcc有一个正确的主意:稍停片刻。该错误是由于Google云端硬盘正在忙于处理该文件(创建该文件,将其推送到可全局访问的文件或其他更新方式)。一旦活动忙碌下来,然后将其他用户添加到文档中就不成问题。

您可以从此Drive API文档页面中看到对收到的(500)错误的描述,以及为实现指数补偿而建议采取的措施,实际上这只是说您应该在再次尝试并进行扩展之前稍作停留每次遇到相同错误时都要延迟。

@eversMcc实施了20秒的暂停时,您不必使用固定的退避时间,因此为什么使用指数是有用的。当只有4或8个就足够了时,为什么还要等20秒呢?另一个资源是描述性博客文章。如果您不想自己实现它,则可以尝试查找类似于这些(基于Python)重试退避程序包的内容。如果您想自己滚动示例,请查看此相关的SO Q&A

使用Drive API可以添加权限或进行任何与文件相关的操作,例如共享,复制,导入/导出等,但是对于任何面向文档的操作(例如,对于Sheets电子表格而言),您将使用Google Sheets API

注意1:在发布此帖子之前一年有一个类似的问题,但已按照本SO Q&A进行了修复。

注意2:Drive API v2的permissions.insert()命令将名称更改为permissions.create()v3- 有关更多详细信息,请参阅迁移指南


cjl*_*ana -2

这很可能是 Drive API 基础架构中的暂时性错误。有时您可能会遇到此类行为,这是由于 Google 端的网络或服务器问题引起的。

不幸的是,有关此类错误的信息非常有限。建议的策略是执行指数退避,如此处所述以及此处更详细的说明。

在某些(奇怪的)情况下,问题可能持续的时间比预期的要长,这对于开发人员来说是一种痛苦并且令人沮丧,但它最终会消失,希望在 24-48 小时内,一切都会恢复正常。如果错误持续很长时间,您应该向 Drive API 支持代理请求跟踪令牌,该代理将在内部生成可供工程部门分析的进一步信息。