Как переименовать или переместить файл в Google Cloud Storage (PHP API)

В настоящее время я пытаюсь переименовать и / или переместить файл облачного хранилища на другое имя / позицию, но не могу заставить его работать. Я использую https://github.com/google/google-api-php-client качестве клиента, загрузка отлично работает с:

...
$storageService = new \Google_Service_Storage( $client )
$file = new \Google_Service_Storage_StorageObject()
$file->setName( 'test.txt' );
$storageService->objects->insert(
   $bucketName,
    $file,
    array(
        'name'          => $filename,
        'data'          => file_get_contents( $somefile )
    )
);
...

Поэтому я попытался изменить имя файла с помощью метода $storageObject->objects->update(), но я не могу найти какую-либо документацию по этому вопросу. Я использовал $storageService->objects->get( $bucketName, $fileName), чтобы получить конкретный файл, который я хотел переименовать (с помощью $file->setName()), но, похоже, я просто не могу передать файл объектам- > обновить функцию. Я делаю это неправильно?

3 ответа

Решение

Хорошо, кажется, я не могу напрямую переименовать файл (пожалуйста, исправьте меня, если я ошибаюсь), я мог только обновить метаданные. Мне удалось заставить его работать, скопировав файл с новым именем файла / местом назначения, а затем удалил старый файл. Я успешно использовал $storageService->objects->copy и $storageService->objects->delete для этого. Это не кажется правильным, но по крайней мере это работает.

Я обнаружил, что при использовании gcutils в сочетании с PHP вы можете выполнять практически все команды php-файла в движке приложения. Скопируйте, удалите, проверьте, существует ли файл.

if(file_exists("gs://$bucket/{$folder}/$old_temp_file")){

        $old_path = "gs://$bucket/{$folder}/$old_temp_file";
        $new_permanent_path = "gs://$bucket/{$folder}/$new_permanent_file";

        copy($old_path, $new_permanent_path);  

        unlink($old_path);

    }

Поскольку это не очень хорошо задокументировано с Google, вот базовый пример:

//RENAME FILE ON GOOGLE CLOUD STORAGE (GCS)

//Get client and auth token (might vary depending on the way you connect to gcs – here with laravel framework facade)
//DOC: https://cloud.google.com/storage/docs/json_api/v1/json-api-php-samples
//DOC: https://developers.google.com/api-client-library/php/auth/service-accounts
//Laravel Client: https://github.com/pulkitjalan/google-apiclient 
//Get google client
$gc = \Google::getClient();
//Get auth token if it is not valid/not there yet
if($gc->isAccessTokenExpired())
    $gc->getAuth()->refreshTokenWithAssertion();
//Get google cloud storage service with the client
$gcStorageO = new \Google_Service_Storage($gc);

//GET object at old position ($path)
//DOC: https://cloud.google.com/storage/docs/json_api/v1/objects/get
$oldObj = $gcStorageO->objects->get($bucket, $path);

//COPY desired object from old position ($path) to new position ($newpath)
//DOC: https://cloud.google.com/storage/docs/json_api/v1/objects/copy
$gcStorageO->objects->copy(
    $bucket, $path, 
    $bucket, $newpath,
    $oldObj
);

//DELETE old object ($path)
//DOC: https://cloud.google.com/storage/docs/json_api/v1/objects/delete
$gcStorageO->objects->delete($bucket, $path);
Другие вопросы по тегам