【问题标题】:Upload Files In Folders Using Google Drive API使用 Google Drive API 上传文件夹中的文件
【发布时间】:2020-11-30 14:16:57
【问题描述】:

我目前有以下代码可以成功地将文件上传到根目录中的谷歌驱动器。我将如何更改以下代码,以便如果$folderName 存在,它会上传该文件夹下的文件,但如果$folderName 不存在,它会创建文件夹,调用它$folderName,然后添加文件在它下面。

function uploadFiles($filePath, $fileName, $folderName) {
    $file = new Google_Service_Drive_DriveFile();
    $file->setName($fileName);
    $file->setDescription('A test document');
    
    $data = file_get_contents($filePath);
    
    $createdFile = $this->service->files->create($file, array(
        'data' => $data,
        'uploadType' => 'multipart'
    ));
}

【问题讨论】:

    标签: php google-api google-drive-api google-api-php-client


    【解决方案1】:

    我相信你的目标和情况如下。

    • 您想使用 googleapis for php 将文件上传到特定文件夹。
    • 当特定文件夹不存在时,您要创建文件夹并将文件上传到该文件夹​​。
    • 当特定文件夹存在时,您要将文件上传到该文件夹​​。
    • 您已经能够使用 Drive API 将文件上传到 Google Drive。

    修改点:

    • 在这种情况下,首先需要确认特定文件夹是否存在。所以在这种情况下,使用Drive API中的“文件:列表”的方法。所以修改后的脚本流程如下。

      1. 使用文件夹名称搜索现有文件夹。
      2. 当文件夹名称的文件夹不存在时,根据文件夹名称创建文件夹,并返回创建文件夹的文件夹ID。
        • 在这种情况下,使用“文件:创建”的方法。
      3. 当文件夹名称的文件夹存在时,返回文件夹ID。
      4. 使用文件夹 ID 将文件上传到文件夹。

    修改脚本:

    function uploadFiles($filePath, $fileName, $folderName) {
        // 1. Search the existing folder using the folder name.
        $res = $this->service->files->listFiles(array("q" => "name='{$folderName}' and trashed=false"));
        $folderId = '';
        if (count($res->getFiles()) == 0) {
            // 2. When the folder of the folder name is NOT existing, the folder is created by the folder name and the folder ID of the created folder is returned.
            $file = new Google_Service_Drive_DriveFile();
            $file->setName($folderName);
            $file->setMimeType('application/vnd.google-apps.folder');
            $createdFolder = $this->service->files->create($file);
            $folderId = $createdFolder->getId();
        } else {
            // 3. When the folder of the folder name is existing, the folder ID is returned.
            $folderId = $res->getFiles()[0]->getId();
        }
    
        // 4. The file is uploaded to the folder using the folder ID.
        $file = new Google_Service_Drive_DriveFile();
        $file->setName($fileName);
        $file->setDescription('A test document');
        $file->setParents(array($folderId));
        $data = file_get_contents($filePath);
        $createdFile = $this->service->files->create($file, array(
            'data' => $data,
            'uploadType' => 'multipart'
        ));
    }
    

    参考资料:

    【讨论】:

    • 非常感谢您的周到!非常感谢!
    • @itsMeMoriarty 感谢您的回复。很高兴您的问题得到解决。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多