当我尝试授予任何文件的访问权限时,我收到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\""
}
感谢任何建议。
答案 0 :(得分:5)
我开始遇到此问题,但设法通过在文件推送和权限插入之间引入暂停来解决此问题。
我的工作流程' (使用http帖子而不是休息客户端):
我总是得到500'内部错误'在第3步;该文件始终被成功推送。
在我的初步调试中,当您单步调试时,我会尝试再将相同的文件推送给Google,并且它会返回与以前尝试使用相同文件相同的fileId(因此Google Drive API必须重新认识文件是一样的。)
但是当我尝试使用相同的fileId插入(仍在调试)后续权限时,它始终是成功的。
所以我刚刚在文件推送和权限插入之间引入了 20s暂停 ,这已经成功了(因为时间在我的应用程序中并不重要)。
Google云端硬盘必须存在某种复制延迟(或#time; time_til_permissions_can_be_inserted')。难以置信,看作是谷歌,但是嘿。
答案 1 :(得分:5)
在这个问题的another answer中,@ eversMcc有正确的想法:暂停一下。该错误是由于Google云端硬盘正忙于处理该文件(创建该文件,将其推送到全局可访问或以其他方式更新)。一旦活动一蹴而就,那么在文档中添加其他用户不应该是一个问题。
您可以从this Drive API documentation page看到您收到的(500)错误的描述以及实施指数退避的建议行动方案,这实际上只是说您应该再次尝试之前暂停一下&安培;每次出现相同的错误时延长延迟。
虽然@eversMcc实现了20秒暂停,但您不必使用固定的退避持续时间,因此为什么指数是有用的。为什么只有4或8才能等待20秒?另一个资源是此描述性博客post。如果您不想自己实现它,可以尝试找到类似于这些(基于Python的)retrying或backoff包的内容。如果您想要自己的例子,请查看this related SO Q&A。
使用Drive API添加权限或任何与文件相关的操作,例如共享,复制,导入/导出等,但对于任何文档 - 以Sheets电子表格为导向的操作,您将使用Google Sheets API代替。
注1:在此帖之前一年有类似的问题,但根据this SO Q&A修正了。
注意2:Drive API v2的permissions.insert()
命令在第3版中将名称更改为permissions.create()
- 有关详细信息,请参阅migration guide
答案 2 :(得分:-3)