gpt4 book ai didi

google-drive-api - Google Drive API,更改 api - 缺少父字段的共享文件

转载 作者:行者123 更新时间:2023-12-04 01:36:27 25 4
gpt4 key购买 nike

我尝试从 GDrive 同步更改,所以我正在使用更改 api。当我将它与 restrictToMyDrive=true 一起使用时,它就像一个魅力。

但是当我尝试扩展它以同时跟踪共享文件时 restrictToMyDrive=false 我遇到了一些主要缺点。我的结果不一致 - parents 字段偶尔会丢失。

假设我们有 user A 将文件夹共享给 user B:

rootSharedFolder => subFolder => subSubFolder => 文件

如果 user B 调用更改 API 的时间与 user A 共享 rootSharedFolder 的时间相对较近,则在 3/10 时间一些将在没有 parents 字段的情况下接收内部文件夹。

即使尝试在收到的已更改项目上使用 files.get API,也会导致空的 parents 字段。但是如果我等一两分钟然后再次调用它,parents 字段确实存在于结果中。

还有其他人遇到过这个问题,也许有解决方法吗?

谢谢!

this behavior happens only when calling the changes api close to the time that the other user share you the items

最佳答案

Parents 字段可能由于两个因素而缺失:

  1. 传播延迟
  2. 没有足够的权限去见 parent

在这两种情况下,您会注意到相同的情况:文件的 parents 字段丢失,起初无法判断您是哪种情况:

传播问题:

当您在共享文件共享给您后立即请求与不属于您的共享文件相关的一些文件详细信息时,可能会发生这种情况。

乍一看你可能找不到它的相关父级,这是因为更改仍在文件系统上传播,这被称为传播问题,应该不会持续很长时间,应该可以识别和解决通过在权限更改后几分钟检索此字段数据来带来不便。

无法访问 parent :

在这种情况下,您可能可以访问某个文件,但不能访问它的父文件夹,因此,您无法知道它的父文件夹,因为它没有与您共享。

这是在 documentation 上:

  • parents — A parent does not appear in the parents list if the requesting user is a not a member of the shared drive and does not have access to the parent. In addition, with the exception of the top level folder, the parents list must contain exactly one item if the file is located within a shared drive.

旁注:您可能对使用 SharedDrives 感兴趣,其中文件由组织而不是个人用户拥有,简化共享过程并可能避免您在这里面临的问题。

https://developers.google.com/drive/api/v3/enable-shareddrives


如何知道是哪种情况?

一种方法是实现指数退避算法来尝试检索丢失的 parent 字段,如果在最大次数的尝试后它没有检索到我们可能是第二种情况:

exponentialBackoff(getParent, 7, 300, function(result) {
console.log('the result is',result);
});

// A function that keeps trying, "getParent" until it returns true or has
// tried "max" number of times. First retry has a delay of "delay".
// "callback" is called upon success.

function exponentialBackoff(toTry, max, delay, callback) {
console.log('max',max,'next delay',delay);
var result = toTry();

if (result) {
callback(result);
} else {
if (max > 0) {
setTimeout(function() {
exponentialBackoff(toTry, --max, delay * 2, callback);
}, delay);

} else {
console.log('we give up');
}
}
}

function getParent() {
var percentFail = 0.8;

return Math.random() >= 0.8;
}

关于google-drive-api - Google Drive API,更改 api - 缺少父字段的共享文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59361613/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com