Получение идентификатора созданного файла для удаления — Google Drive API

#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:

Я полагаю, что ваша цель заключается в следующем.

  1. Вы хотите получить идентификатор файла загруженного файла на Google Диске с помощью googleapis для php.
  2. Когда имя файла $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 Спасибо за ваш ответ. Что касается вашего дополнительного вопроса, я добавил еще один пример скрипта. Не могли бы вы, пожалуйста, подтвердить это? Если я неправильно понял ваш новый вопрос, я приношу извинения.