Google 驱动器 API - 获取包括文件夹在内的文件列表

Google Drive API - get list of files including folders

我需要列出用户驱动器云中的所有图像。

我使用 https://www.googleapis.com/drive/v2/files 和正确的过滤器来查询所有图像。我需要将我的应用程序中的结果分组到文件夹中。我知道一个文件可以有多个父级,没关系。

我想避免使用第一次调用中的父 ID 通过 https://developers.google.com/drive/v2/reference/files/get 进行调用(对每个文件调用一次)来获取文件夹。

是否有一种网络友好的方式来获取文件夹中包含的所有文件?

编辑

一个简单的解决方案是在一个查询中获取所有具有 id 的文件夹,并在此结果中查找文件夹名称。也许这在某种程度上是可能的?

正如您在上面的评论中回答的那样(但是您不能匹配名称,您必须匹配 ID;名称不是唯一的)。

第 1 步:一次获取所有文件夹(分页结果、过滤不需要的字段、跳过已删除的字段):

  private static Drive mGOOSvc;
  ....
  static ArrayList<ContentValues> getFolders() {
    ArrayList<ContentValues> cvs = new ArrayList<>();
    if (mGOOSvc != null) try {
      Drive.Files.List qry = mGOOSvc.files().list()
        .setQ("mimeType = 'application/vnd.google-apps.folder'")
        .setFields("items(id,labels/trashed,parents/id,title),nextPageToken");
      String npTok = null;
      if (qry != null) do {
        FileList gLst = qry.execute();
        if (gLst != null) {
          for (File gFl : gLst.getItems()) {
            if (gFl.getLabels().getTrashed()) continue;
            for (ParentReference parent : gFl.getParents())
              cvs.add(newContentValues(gFl.getTitle(), gFl.getId(), parent.getId()));
          }
          npTok = gLst.getNextPageToken();
          qry.setPageToken(npTok);
        }
      } while (npTok != null && npTok.length() > 0);
    } catch (Exception e) { /* handle Exceptions */ }
    return cvs;
  }

第2步:解析得到的ArrayList构建树结构(匹配ParentIds,处理多个parents)

步骤 3: 对 mime 类型为 ""image/jpeg", "image/png", ... "whatever img mimetype" 的文件执行相同的操作(只需修改上面的代码获取文件)并再次解析。

当然 'execute()' 方法会产生异常,应该按照 here.

中指出的那样进行处理

...并且您可以采用“不太网络友好”的方法迭代文件夹树,如 'testTree()' 方法 here.如果你不知道你的树结构有多深,递归是必要的。

祝你好运