Google驱动器php api不返回Google驱动器文件夹

Google驱动器php api不返回Google驱动器文件夹,php,google-api,google-drive-api,google-api-php-client,Php,Google Api,Google Drive Api,Google Api Php Client,我正试图得到所有文件夹的列表,我可以看到在谷歌驱动器。 所以我可以检查一个文件夹,它是否存在。如果没有,那么我可以创建一个。 但是Google Drive PHP api返回空文件夹列表,而我可以在我的Google Drive中看到很多文件夹(通过浏览器) 下面是我正在使用的类:- <?php class gdrive{ //credentials (get those from google developer console https://console.develope

我正试图得到所有文件夹的列表,我可以看到在谷歌驱动器。 所以我可以检查一个文件夹,它是否存在。如果没有,那么我可以创建一个。 但是Google Drive PHP api返回空文件夹列表,而我可以在我的Google Drive中看到很多文件夹(通过浏览器)

下面是我正在使用的类:-

<?php

class gdrive{

    //credentials (get those from google developer console https://console.developers.google.com/)

var $clientId = "1047996724365-MyID.apps.googleusercontent.com";

var $clientSecret = "MySecret";
var $redirectUri = 'http://localhost/google_drive2/gdrive_upload.php';  

    //variables
    var $fileRequest;
    var $mimeType;
    var $filename;
    var $path;
    var $client;


    function __construct(){
        require_once 'src/Google/autoload.php'; // get from here https://github.com/google/google-api-php-client.git 
        require_once 'src/Google/Client.php'; // get from here https://github.com/google/google-api-php-client.git 
        //require_once 'src/Google/Drive.php'; // get from here https://github.com/google/google-api-php-client.git 

        $this->client = new Google_Client();
    }


    function initialize(){
        //echo "<br/>initializing class\n";
        $client = $this->client;

        $client->setClientId($this->clientId);
        $client->setClientSecret($this->clientSecret);
        $client->setRedirectUri($this->redirectUri);
        $client->addScope(
    "https://www.googleapis.com/auth/drive", 
    "https://www.googleapis.com/auth/drive.appfolder");


        $refreshToken = file_get_contents(__DIR__ . "/token.txt"); 

        $client->refreshToken($refreshToken);
        $tokens = $client->getAccessToken();

        $client->setAccessToken($tokens);
        //$client->setDefer(true);
        $this->processFile();

    }

    function processFile(){

        $fileRequest = $this->fileRequest;
        //echo "Process File $fileRequest\n";
        $path_parts = pathinfo($fileRequest);
        $this->path = $path_parts['dirname'];
        $finfo = finfo_open(FILEINFO_MIME_TYPE);
        $this->mimeType = finfo_file($finfo, $fileRequest);
        finfo_close($finfo);

        //echo "Mime type is " . $this->mimeType . "\n";

        $this->upload();

    }


/**
* Get the folder ID if it exists, if it doesnt exist, create it and return the ID
*
* @param Google_DriveService $service Drive API service instance.
* @param String $folderName Name of the folder you want to search or create
* @param String $folderDesc Description metadata for Drive about the folder (optional)
* @return Google_Drivefile that was created or got. Returns NULL if an API error occured
*/
function getFolderExistsCreate($service, $folderName, $folderDesc) {
error_reporting(E_ALL); ini_set('display_errors', 1);
    $parameters['q'] = "mimeType='application/vnd.google-apps.folder' and trashed=false";
    $files = $service->files->listFiles($parameters);
    $found = false;
    // Go through each one to see if there is already a folder with the specified name

print_r($files);exit; /****************RESPONSE ON THIS LINE *********/


    foreach ($files['items'] as $item) {
        if ($item['title'] == $folderName) {
            $found = true;
            return $item['id'];
            break;
        }
    }
    // If not, create one
    if ($found == false) {
        $folder = new Google_Service_Drive_DriveFile();
        //Setup the folder to create
        $folder->setTitle($folderName);
        if(!empty($folderDesc))
            $folder->setDescription($folderDesc);
        $folder->setMimeType('application/vnd.google-apps.folder');
        //Create the Folder
        try {
            $createdFile = $service->files->insert($folder, array(
                'mimeType' => 'application/vnd.google-apps.folder',
                ));
            // Return the created folder's id
            echo  $createdFile->id;
        } catch (Exception $e) {
            print "An error occurred: " . $e->getMessage();
        }
    }





exit;

/*
        $client = new Google_Client();
        $client->setClientId($this->clientId);
        $client->setClientSecret($this->clientSecret);
        $client->setRedirectUri($this->redirectUri);

        $refreshToken = file_get_contents(__DIR__ . "/token.txt"); 

        $client->refreshToken($refreshToken);
        $tokens = $client->getAccessToken();
        $client->setAccessToken($tokens);
        $client->setDefer(true);

        $service = new Google_Service_Drive($client);
    // List all user files (and folders) at Drive root
    $parameters['q'] = "mimeType='application/vnd.google-apps.folder' and trashed=false";
    $files = $service->files->listFiles($parameters);
    print_r($files);exit;
*/
    $found = false;
    // Go through each one to see if there is already a folder with the specified name
    foreach ($files['items'] as $item) {
        if ($item['title'] == $folderName) {
            $found = true;
            return $item['id'];
            break;
        }
    }
    // If not, create one
    if ($found == false) {
        $folder = new Google_Service_Drive_DriveFile();
        //Setup the folder to create
        $folder->setTitle($folderName);
        if(!empty($folderDesc))
            $folder->setDescription($folderDesc);
        $folder->setMimeType('application/vnd.google-apps.folder');
        //Create the Folder
        try {
            $createdFile = $service->files->insert($folder, array(
                'mimeType' => 'application/vnd.google-apps.folder',
                ));
            // Return the created folder's id
            return $createdFile->id;
        } catch (Exception $e) {
            print "An error occurred: " . $e->getMessage();
        }
    }
}

    function upload(){
        $client = $this->client;
        $service = new Google_Service_Drive($client);

    $folderName='aaaaaaa';
     $folderDesc='Folder Desc';

// Setup the folder you want the file in, if it is wanted in a folder
    if(isset($folderName)) {
        if(!empty($folderName)) {
            //$parent = new Google_Service_Drive_ParentReference();
            //$parent->setId(getFolderExistsCreate($service, $folderName, $folderDesc));
            $parent=$this->getFolderExistsCreate($service, $folderName, $folderDesc);
            print_r($parent);exit;
            $file->setParents(array($parent));
        }
    }




        $file = new Google_Service_Drive_DriveFile(array(
  'name' => $this->filename));
        $file->title = "a.txt";
        $chunkSizeBytes = 1 * 1024 * 1024;

        $fileRequest = $this->fileRequest;
        $mimeType = $this->mimeType;

        //$request = $service->files->create($file);

        // Create a media file upload to represent our upload process.
        $media = new Google_Http_MediaFileUpload(
          $client,
          $request,
          $mimeType,
          null,
          true,
          $chunkSizeBytes
        );
        $media->setFileSize(filesize($fileRequest));

        // Upload the various chunks. $status will be false until the process is
        // complete.
        $status = false;
        $handle = fopen($fileRequest, "rb");

        // start uploading      
        //echo "Uploading: " . $this->filename . "\n";  

        $filesize = filesize($fileRequest);

        // while not reached the end of file marker keep looping and uploading chunks
        while (!$status && !feof($handle)) {
            $chunk = fread($handle, $chunkSizeBytes);
            $status = $media->nextChunk($chunk);  
        }

        // The final value of $status will be the data from the API for the object
        // that has been uploaded.
        $result = false;
        if($status != false) {
          $result = $status;
        }

        fclose($handle);
        // Reset to the client to execute requests immediately in the future.
        $client->setDefer(false);   
        ?>https://drive.google.com/open?id=<?= $result->id ?><?php
    }

}

?>

请告诉我哪里错了

您可能希望首先检查此相关文件,其中提到,出于安全原因,没有方法列出用户驱动器帐户中的所有文件

此外,驱动器API仅允许访问两类文件:

  • 用户使用给定驱动器应用程序创建的文件
  • 用户使用给定驱动器应用打开的文件
通过建议的链接阅读,您可能需要在Google Drive中查看文件和文件夹的列表。此外,除了使用API管理权限外,应用程序还可以显示标准的Google驱动器共享对话框,让用户共享文件

有了权限,您可以继续使用并在查询参数中指定:

('root' in parents and mimeType = 'application/vnd.google-apps.folder')
这将返回根目录中的文件夹。使用“尝试”来测试它

有关详细信息,您可能希望查看以下链接:

('root' in parents and mimeType = 'application/vnd.google-apps.folder')