#php #google-api #google-drive-api #google-api-php-client
#php #google-api #google-drive-api #google-api-php-client
Вопрос:
Я пытаюсь получить идентификатор созданного файла с помощью Google Drive API, чтобы затем использовать его для удаления файлов. Вот код:
$file = new Google_Service_Drive_DriveFile();
$file->setName($fileName);
$file->setDescription('Volunteer Hours');
$file->setParents(array($folderId));
$data = file_get_contents($filePath);
$createdFile = $this->service->files->create($file, array(
'data' => $data,
'uploadType' => 'multipart'
));
Есть ли какой-то .id
метод, где я могу сказать:
$createdFileID = $createdFile.id;
Я заглянул в Google Drive api, но не смог найти ни одного такого метода. Причина, по которой я хочу идентификатор для загруженного файла, заключается в том, что я могу удалять файлы, если захочу, используя этот конкретный идентификатор
В конечном счете, вот функция, которую я пытаюсь написать:
// Deletes a specific file from a specific folder
function deleteFile($folderName, $fileID) {
}
Таким образом, мы защищены и удаляем нужный файл, если в данной папке есть файлы с таким же именем.
Ответ №1:
Я полагаю, что ваша цель заключается в следующем.
- Вы хотите получить идентификатор файла загруженного файла на Google Диске с помощью googleapis для php.
- Когда имя файла
$fileName
существует в определенной папке$folderName
, вы хотите удалить существующий файл.
Ответ на вопрос 1:
В этом случае, как насчет следующей модификации?
От:
$createdFile = $this->service->files->create($file, array(
'data' => $data,
'uploadType' => 'multipart'
));
Для:
$createdFile = $this->service->files->create($file, array(
'data' => $data,
'uploadType' => 'multipart'
));
$createdFileID = $createdFile->getId(); // Added
- Таким образом, идентификатор загруженного файла может быть получен с помощью
$createdFileID
.
Ответ на вопрос 2:
Если вы хотите удалить файл, используя имя файла и папки по адресу function deleteFile($folderName, $fileName) {}
, как насчет следующего примера скрипта?
Пример скрипта:
function deleteFile($folderName, $fileName) {
$client = getClient();
$drive = new Google_Service_Drive($client);
$res1 = $drive->files->listFiles(array("q" => "name='{$folderName}' and trashed=false"));
$folderId = $res1->getFiles()[0]->getId();
$res2 = $drive->files->listFiles(array("q" => "name='{$fileName}' and '{$folderId}' in parents and trashed=false"));
if (count($res2->getFiles()) == 0) {
// When the filename of $fileName is not existing,
// do something
} else {
$fileId = $res2->getFiles()[0]->getId();
$drive->files->delete($fileId);
}
}
- В этом случае, когда имя файла
$fileName
существует в определенной папке$folderName
, существующий файл удаляется.
Ссылки:
Добавлено:
Если вы хотите удалить файл, используя идентификатор файла, вы можете использовать следующий скрипт.
function deleteFile($fileID) {
$client = getClient();
$drive = new Google_Service_Drive($client);
$drive->files->delete($fileID);
}
- В этом случае
$folderName
не требуется использовать. Потому что на Google Диске все файлы имеют уникальный идентификатор файла.
Комментарии:
1. Просто небольшой вопрос. Вышесказанное работает нормально, но мне было интересно, как бы работала функция удаления, если бы было два файла с одинаковым именем. Есть ли какой-нибудь способ написать функцию удаления так, чтобы она использовала fileID для удаления, а не имя файла? Я внес правку в вопрос вверху, поэтому DeleteFile() принимает $fileID, а не $ fileName. Спасибо!
2. @itsMeMoriarty Спасибо за ваш ответ. Что касается вашего дополнительного вопроса, я добавил еще один пример скрипта. Не могли бы вы, пожалуйста, подтвердить это? Если я неправильно понял ваш новый вопрос, я приношу извинения.