Google Drive AP - 仅在PHP中使用根文件夹列出文件夹

时间:2015-10-17 12:34:19

标签: php google-drive-api

我试图列出具有根目录的文件夹,用户可以在其中选择要上传文件或根目录的文件夹。

我可以通过将查询放在下面的这一行来实现这一目标吗?

$files = $service->files->listFiles($parameters);

提前致谢

2 个答案:

答案 0 :(得分:4)

您应该能够使用Files.list?q=参数来列出具有根目录的文件夹。

看起来像这样:q:mimeType='application/vnd.google-apps.folder' and 'root' in parents and trashed=false

在上面的查询中,它是对3个标准的过滤。

  1. mimeType = application / vnd.google-apps.folder(使用特定于文件夹的MIME类型搜索文件夹)
  2. 父母中的
  3. 'root'(搜索位于根目录中的所有文件和文件夹)
  4. trashed = false(搜索未删除的文件)
  5. 您可以尝试测试查询here

    在PHP代码中,这将是这样的:

    $parameters['q'] = "mimeType='application/vnd.google-apps.folder' and 'root' in parents and trashed=false"
    $files = $service->files->listFiles($parameters);
    

答案 1 :(得分:2)

以下代码会立即从search parameters复制。 您需要指定$service$folderId

要在GoogleDrive中获取此ID,有点棘手,最好通过{{3}}完成。请参阅我的函数getSOFolderByName()以获取示例(搜索名为'stackoverflow'的文件夹并检索它可以找到的第一个ID)。 listSOFolder()是起点。

function listSOFolder($service) {
    $folderID = getSOFolderByName($service);
    if ($folderID)
        printFilesInFolder($service, $folderID);
}

function getSOFolderByName($service) {
    $search = "title='stackoverflow' AND mimeType = 'application/vnd.google-apps.folder' AND trashed != true";
    $parameters = array("q" => $search);
    $files = $service->files->listFiles($parameters);
    if (!empty($files["items"])) {
        $folderID = $files["items"][0]->getId(); // the first element
        return $folderID;
    } else
        return false;
}

/**
 * Print files belonging to a folder.
 * Copied shamelessly from https://developers.google.com/drive/v2/reference/children/list
 * @param Google_Service_Drive $service Drive API service instance.
 * @param String $folderId ID of the folder to print files from.
 */
function printFilesInFolder($service, $folderId) {
  $pageToken = NULL;

  do {
    try {
      $parameters = array();
      if ($pageToken) {
        $parameters['pageToken'] = $pageToken;
      }
      $children = $service->children->listChildren($folderId, $parameters);

      foreach ($children->getItems() as $child) {
        print 'File Id: ' . $child->getId();
      }
      $pageToken = $children->getNextPageToken();
    } catch (Exception $e) {
      print "An error occurred: " . $e->getMessage();
      $pageToken = NULL;
    }
  } while ($pageToken);
}