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

问题描述 投票:1回答:1

我尝试从GDrive同步更改,所以我正在使用更改api。当我将其与restrictToMyDrive=true结合使用时,它就像一个护身符。

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

假设我们有user A将该文件夹共享到user B

rootSharedFolder =>subFolder=>subSubFolder=> File

[如果user B相对于user A共享rootSharedFolder的时间调用更改API,那么在3/10次中,将收到一些内部文件夹,而没有parents字段。

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

其他人遇到此问题,也许有解决方法?

谢谢!

仅当在其他用户与您共享项目的时间附近调用changes api时,才会发生此行为

google-drive-api
1个回答
0
投票

父母字段可能由于两个因素而丢失:

  1. 传播延迟
  2. 权限不足,无法看到父母

在两种情况下,您都会收到相同的信息:文件缺少parents字段,因此起初没有办法告诉我们哪种情况:

传播问题:

[这是在您完成对Google文件夹的任何更改之前请求一些文件数据时发生的。这就是所谓的传播问题

无法与父母接触:

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

可以读取here

  • parents-如果发出请求的用户不是共享驱动器的成员并且不能访问父级,则父级不会出现在父级列表中。另外,除了顶级文件夹外,如果文件位于共享驱动器中,则父列表必须仅包含一项。

旁注:您可能对使用SharedDrives感兴趣,该文件是组织而非个人用户拥有的文件,可简化共享过程,并避免在此遇到的问题。

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


如何知道是哪种情况?

一种方法是实施指数退避算法以尝试检索丢失的父字段,如果经过最大尝试次数后仍无法检索,我们可能是第二种情况:

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;
}
© www.soinside.com 2019 - 2024. All rights reserved.