谷歌驱动器AP列表文件夹只与根文件夹在PHP


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

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

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

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

Thanks in advance

您应该能够简单地使用Files。

使用?q=参数列出具有根目录的文件夹。

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

在上面的查询中,它是根据3个条件筛选的。

  1. mimeType = application/vnd.google-apps。文件夹(使用特定于文件夹的MIME类型搜索文件夹)
  2. 父目录中的'root'(查找位于根目录下的所有文件和文件夹)
  3. trashed = 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);
}