问题描述
我目前拥有以下代码,可以成功将文件上传到根目录下的google drive中。我该如何更改以下代码,以便如果存在$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'
));
}
解决方法
我相信您的目标和情况如下。
- 您要使用googleapis for php将文件上传到特定文件夹。
- 当特定文件夹不存在时,您要创建该文件夹并将文件上传到该文件夹。
- 当特定文件夹存在时,您要将文件上传到该文件夹。
- 您已经能够使用Drive API将文件上传到Google云端硬盘。
修改点:
-
在这种情况下,首先需要确认特定文件夹是否存在。因此,在这种情况下,将使用Drive API中的“文件:列表”方法。因此,修改后的脚本的流程如下。
- 使用文件夹名称搜索现有文件夹。
- 当文件夹名称的文件夹不存在时,将通过文件夹名称创建该文件夹,并返回创建的文件夹的文件夹ID。
- 在这种情况下,使用“文件:创建”方法。
- 当文件夹名称的文件夹存在时,返回文件夹ID。
- 使用文件夹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'
));
}