【问题标题】:Getting a list of files by folder on Drive SDK在 Drive SDK 上按文件夹获取文件列表
【发布时间】:2012-07-09 18:11:34
【问题描述】:

我正在尝试构建一个网络用户界面,供用户浏览他/她的 Google 云端硬盘并选择一个或多个文档,以便稍后在网站中从数据库中引用。我目前正在使用 PHP 构建 Web 界面。

我面临的问题是我找不到一个函数来按文件夹 ID 获取文件列表。

我尝试使用:

$service->children->listChildren($rootFolderId)

...但这只会给出文件夹中文件的文件引用 ID(所谓的子资源项),这意味着我必须遍历这些文件并为每个文件创建一个调用才能获取我的 UI 所需的所有元数据。

不幸的是..

$service->files->list()

..将列出我所有的文件,没有按文件夹过滤选项。

我想知道是否有一种有效的方法可以从对 Drive 服务器的一次调用中提取文件夹文件列表。我实际上记得能够通过旧的 Google DOC API 执行此任务。

非常感谢您的帮助

【问题讨论】:

标签: php google-drive-api


【解决方案1】:

NB 此答案使用 v2 API。新应用程序应写入 v3 API。

now 可以使用 drive.files.list 端点列出属于特定文件夹的文件。

为此,您可以使用?q= 查询参数,如下所示:

GET https://www.googleapis.com/drive/v2/files?q="'<FOLDER_ID>' in parents"

在 PHP 中是这样的

$service->files->list(array('q' => "'<FOLDER_ID>' in parents"));

【讨论】:

  • 这会返回一个错误。如果您在这里测试它:developers.google.com/drive/v2/reference/files/list 使用有效的文件夹 ID,它会返回“400 Bad Request”错误。如果您删除 'in parents' 位,则它会返回文件对象。
  • 在玩了一些之后,我能够得到它的一个警告:除了包裹搜索的单引号之外,您还必须将 变量包裹在单引号中细绳。所以它看起来像这样:'q' => "'$folderID' in parents"
  • 这个只返回一级子
  • 您可以通过在查询中添加trashed = false 来过滤掉已删除的文件。运营商列表可以在这里找到:developers.google.com/drive/web/search-parameters
【解决方案2】:

查询参数 &lt;FOLDER_ID&gt; in parents 会列出 文件和/或文件夹在父项中具有这样的 吗?
在我看来,- 这是预期的结果。我问这个问题是因为,在上面的答案中,有人写道:

...列出属于特定文件夹的文件

documentation about search-parameters 解释说:

这会查找 ID 为的父文件夹的所有子 文件夹 1234567.

我将补充一点,可以通过向查询字符串添加类似
and mimeType='application/vnd.google-apps.folder'
的内容来返回仅文件夹列表。

【讨论】:

    【解决方案3】:

    无需使用搜索查询。 只需拨打电话 GET https://www.googleapis.com/drive/v2/files/{folderId}/children

    https://developers.google.com/drive/v2/reference/children/list

    【讨论】:

    • 这不会返回文件对象。它返回不同的子对象
    • 但是一旦您得到响应,您将获得 id 列表,因此您需要为每个文件发出另一个 get 请求。
    【解决方案4】:

    现在很容易,不用担心。如果您想从特定文件夹中获取所有文件和文件夹,只需将此代码复制并粘贴到您的项目中,它就会从特定文件夹中检索所有文件和文件夹。 注意:您应该有自己的文件夹 ID

     List<File> result = new ArrayList<File>();
        Files.List request = null;
    
        try {
              request = mService.files().list();//plz replace your FOLDER ID in below line
              FileList files = request.setQ("'"+MyFoler_Id+"' in parents and trashed=false"").execute();
              result.addAll(files.getItems());          
              request.setPageToken(files.getNextPageToken());
            } 
          catch (IOException e)
          {
            System.out.println("An error occurred: " + e);
            request.setPageToken(null);
          }
    

    //打印出我们检索到的文件和文件夹标题。

      for(File f:result)
      {
          System.out.println("My recvd data "+f.getTitle());
      }
    

    【讨论】:

    • 这在我看来不像 PHP。
    • 示例程序是Java语言。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 2020-08-05
    • 1970-01-01
    • 2013-07-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多