繁体   English   中英

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

[英]Google Drive AP - list folders only with root folder in PHP

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

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

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

提前致谢

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

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

在上面的查询中,它根据 3 个条件进行过滤。

  1. mimeType = application/vnd.google-apps.folder(使用文件夹特定的 MIME 类型搜索文件夹)
  2. 父目录中的“root”(搜索位于根目录中的所有文件和文件夹)
  3. 垃圾= false(搜索未垃圾的文件)

您可以尝试在此处测试查询。

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

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

以下代码直接从他们的API 文档页面复制而来。 您需要指定一个$service和一个$folderId

在 GoogleDrive 中获得这样的 ID 有点棘手,最好通过他们的搜索参数来完成 请参阅我的函数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);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM