【问题标题】:Is it possible to query for multiple folders (parents) using Google's Drive API v3?是否可以使用 Google 的 Drive API v3 查询多个文件夹(父母)?
【发布时间】:2020-02-08 21:48:07
【问题描述】:

我有一个组织方便的 Google 云端硬盘,它的共享云端硬盘中有子文件夹。我试图解析所有或指定的文件夹并检索它们的内容或图像。我有用于检索给定根文件夹 id 的所有文件夹 id 的工作代码,并且我有用于在 one 文件夹中检索文件的工作代码。

我的问题是,当我尝试将查询串在一起以检索指定文件夹 ID 的 any 内的文件时,API 响应中返回以下内容:空的files数组,尽管每个文件夹中都有图像,或者 files 数组仅包含 文件夹 mime-types 而不是单个图像。

我一直被困在这个问题上,尝试了各种方法,从更改我的权限范围、不同的文件夹、尝试将 Frankenstein 一起查询,但没有什么能让我更接近。


这是我的查询示例:'<folder-id-1>' in parents or '<folder-id-2>' in parents

还有我代码中的 sn-p:

const res = await this.drive.files.list({
    q: `(${encodeURIComponent(foldersChunk.map(folder => `'${folder.id}' in parents`).join(' or '))})`
});

我必须逐个查询每个单独的文件夹吗?我希望找到一个更好的解决方案,这样我就不必对 Google 进行过多的 API 调用,或者通过请求每个单独的文件夹来降低用户应用程序的速度,而不是一次在多个文件夹中获取图像。

FWIW:我查看了this post on S.O.,这是我最初想到的地方。另一位用户评论了一个类似的查询,将<folder-id> in parents 嵌套在一起,对他们有用,但就像我解释的那样,它对我没有用。

【问题讨论】:

    标签: node.js google-api google-drive-api


    【解决方案1】:

    google-api-nodejs-client 有一个错误,我可以检查你的代码,因为它没有像你的情况那样返回任何东西,但后来我使用Try this API 进行故障排除。这样,将 q 参数的值设置为您的调用 ('<folder-id-1>' in parents) 中的值,它将按预期工作。

    因此,作为一种解决方法,您可以使用 axios,然后按如下方式构建调用:

    const queryFoldersWithAxios = async () => {
      const dummyData = [{id: "folder-id-1"}, {id: "folder-id-2"}];
      const params = {
        q: dummyData.map(folder => `'${folder.id}' in parents`).join(' or ')
      };
      const headers = {
        "Authorization": "Bearer <YOUR_ACCESS_TOKEN>", 
        "Content-Type": "application/json"
      }
      return await axios.get("https://www.googleapis.com/drive/v3/files", {params, headers})
    }
    

    通知

    • 您可以使用Google OAuth 2.0 Playground 轻松获取访问令牌进行测试。

    • 我在 Github 上创建了一个问题报告错误,您可以查看它here

    【讨论】:

    • 不幸的是,这对我来说不是一种解决方法。我已经尝试过你的工作,但我仍然得到与以前完全相同的输出,即返回一个文件夹,而不是它们共有的所有项目。我再次尝试使用另外两个其中没有嵌套文件夹的文件夹,当我应该收到 40 张图片时,使用您的 workaround 和 Drive 时没有返回任何内容来自googleapis
    • 转念一想,我再次查看了您在 GitHub 上提出的问题,但我现在意识到了这个问题,您是对的:当您使用 googleapis 中的 google.drive 时,当您尝试列出使用'&lt;folder-id-1&gt;' in parents or '&lt;folder-id-2&gt;' in parents or... 的多个集合中的所有文件的行为非常不一致。我详细解释了不一致over on the issue you created on GitHub
    【解决方案2】:

    TLDR;添加参数 corpora=allDrives

    我刚刚遇到了类似的问题。使用单个 'folderId1' in parents 查询文件列表时,我收到了其中包含的所有三个文件。当我查询两个文件夹'folderId1' in parents or 'folderId2' in parents 时,我只收到了两个结果。第二个文件夹是空的,但不应减少第一个文件夹的列表。当第二个文件夹包含文件时,结果包含这些文件,但仍然缺少原始列表中的第三个文件。

    我还发现 a post 讨论了另一种语法 parents in 'folderId',当我对单个文件夹进行尝试时,它只返回了两个文件。

    令人着迷。

    经过进一步修改后,我发现设置参数 corpora=allDrives 会导致上述两个版本都返回完整的三个文件。

    我的猜测是 API 假设基于查询的语料库。在我的例子中,各种文件夹来自单独的团队/共享驱动器。对于单个文件夹,它将其设置为drive,因为这满足了它的需要。对于跨越多个驱动器的多个文件夹,它不能使用drive,因此它将其设置为user,它只返回创建、打开或直接与用户共享的文件。对于allDrives,需要显式设置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-09
      • 1970-01-01
      相关资源
      最近更新 更多