使用 Google 驱动器 API 上传文件夹中的文件
Upload Files In Folders Using Google Drive API
我目前有以下代码可以成功将文件上传到根目录中的 google 驱动器。我将如何更改以下代码,以便如果 $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 将文件上传到特定文件夹 php。
- 当特定文件夹不存在时,您要创建文件夹并将文件上传到文件夹。
- 当特定文件夹存在时,您要将文件上传到该文件夹。
- 您已经能够使用 Drive API.
将文件上传到 Google Drive
修改点:
在这种情况下,首先需要确认指定的文件夹是否存在。所以在这种情况下,使用DriveAPI中的“Files:list”的方法。所以修改后的脚本流程如下
- 使用文件夹名称搜索现有文件夹。
- 当文件夹名称的文件夹不存在时,根据文件夹名称创建文件夹,并返回创建的文件夹的文件夹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'
));
}
参考文献:
我目前有以下代码可以成功将文件上传到根目录中的 google 驱动器。我将如何更改以下代码,以便如果 $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 将文件上传到特定文件夹 php。
- 当特定文件夹不存在时,您要创建文件夹并将文件上传到文件夹。
- 当特定文件夹存在时,您要将文件上传到该文件夹。
- 您已经能够使用 Drive API. 将文件上传到 Google Drive
修改点:
在这种情况下,首先需要确认指定的文件夹是否存在。所以在这种情况下,使用DriveAPI中的“Files:list”的方法。所以修改后的脚本流程如下
- 使用文件夹名称搜索现有文件夹。
- 当文件夹名称的文件夹不存在时,根据文件夹名称创建文件夹,并返回创建的文件夹的文件夹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'
));
}