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

Google api 使用Google Drive API更新权限时出现500错误,google-api,google-drive-api,google-api-client,Google Api,Google Drive Api,Google Api Client,当我试图授予任何文件的访问权限时,我遇到了500个错误。当文件与某人共享时,我不想发送电子邮件。我想停止通知邮件 Insert insert = service.permissions().insert(fileId, newPerm); insert.setSendNotificationEmails(false); newPerm = insert.execute(); 500 OK { "code" : 500

当我试图授予任何文件的访问权限时,我遇到了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\""
            }

感谢您的建议。

这很可能是驱动器API基础结构中的暂时错误。您有时可能会遇到这种行为,这是由于谷歌端的网络或服务器问题造成的

不幸的是,关于这类错误的信息非常有限。一个建议的策略是执行和指数退避,如解释的和更详细的


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

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

我的“工作流”(使用http POST而不是rest客户端):

  • 推送文件
  • 从Google Drive API的响应中获取文件ID
  • 使用文件ID发送有效负载以插入权限
  • 我总是在第3步得到500个“内部错误”;文件始终被成功推送

    在我的初始调试中,当我单步执行时,我会尝试再次将相同的文件推送到Google,它会返回与以前尝试使用相同文件时相同的文件ID(因此Google Drive API必须重新注册相同的文件)

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

    因此,我刚刚在文件推送和权限插入之间引入了一个20秒的暂停时间,这就成功了(因为时间在我的应用程序中并不重要)

    Google Drive中一定存在某种复制延迟(或“插入权限之前的时间”)。很难相信,因为这是谷歌,但是嘿。

    在这个问题上,@有一个正确的想法:暂停一下。该错误是由于Google Drive正忙于处理该文件(创建该文件、将其推送到全局访问或以其他方式更新该文件)。一旦纷乱的活动平息下来,那么向文档中添加其他用户应该不会有问题

    您可以从对收到的(500)个错误的描述以及建议的操作过程(即实施指数退避)中看到,这实际上只是说您应该在重试之前暂停一下&每次出现相同的错误时延长延迟

    尽管@eversmc实现了20秒的暂停,但您不必使用固定的退避持续时间,这就是为什么指数型是有用的。只有4或8个就足够了,为什么还要等20秒呢?另一个资源是这个描述性博客。如果您不想自己实现它,可以尝试找到类似于这些(基于Python的)或包的东西。如果你想要一个自己滚动的例子,请查看

    使用添加权限或任何与文件相关的操作,如共享、复制、导入/导出等,但对于任何面向文档的操作,例如使用工作表和电子表格,您将使用

    注1:在这篇文章发表前一年,有一个类似的问题,但它是根据


    注2:驱动API v2的
    权限。insert()
    命令将v3中的名称更改为
    权限。create()
    ——有关更多详细信息,请参见。您能告诉我,我如何处理此异常吗。这给我的申请带来了麻烦。感谢您的回复。谢谢你真的没有更多的细节了吗?没有办法更彻底地诊断或记录错误?5秒钟的暂停似乎对我的程序有效。您的里程可能会有所不同。