首页 > 解决方案 > 无法使用获得 404 的 Google Cloud SDK 重命名目录:没有这样的对象:buket/olddirname

问题描述

我正在尝试使用 SDK 重命名谷歌云的目录。我收到错误消息404 No such object:buketname/previousDirName。重命名文件工作正常,但仅在重命名文件夹时遇到问题。

这是我正在使用的代码:

          if(file_exists(dirname(__DIR__) .'/vendor/autoload.php')){
        
            $selected_bucket = 'BucketName';
            $key_file = dirname(__DIR__).'/authkey.json';
            $client = new StorageClient([
                'keyFilePath' => $key_file,
            ]);
            $bucket = $client->bucket($selected_bucket);
            $endpoint = 'https://storage.googleapis.com/'. $selected_bucket;
            if(isset($subfolder)){
                $adapter = new GoogleStorageAdapter($client, $bucket, $subfolder.'/');  // code to list specific subfolder of the bucket
            } else {
                $adapter = new GoogleStorageAdapter($client, $bucket);
            }

            $filesystem = new Filesystem($adapter, Array ( "url" => $endpoint ));

            // rename a file
            $filesystem->rename('filename.txt', 'newname.txt'); // works fine

            // rename a directory
            $response =  $filesystem->rename('developer', 'developer123');

            print_r($response);
            die();
    }

我试图在 sdk 中调试,但没有找到。如果有人遇到同样的问题但没有找到任何可行的解决方案,我会搜索该问题。我找到了一个,但解决方案在gsutil.

如果重命名目录,请建议我缺少什么。

谢谢

标签: directoryfilesystemsgoogle-cloud-storagerename

解决方案


Google Cloud Storage 没有“文件夹”的概念,只有包含存储对象(平面命名空间)的存储桶,“/”的含义实际上是由客户端(和客户端库)强加的。因此,文件夹不能以原子方式重命名,因此您需要使用gsutil mv命令重命名每个包含的文件,如您已经弄清楚的那样,例如:

gsutil -d mv gs://my-bucket/folder1 gs://my-bucket/folder2

  • -d 选项将导致它输出 gsutil 生成的请求序列,以执行重命名和所需的其他调试信息。

  • 此外,您可以尝试使用-I 选项,该选项从标准输入读取文件列表,并支持 mv 命令,如此所述。

在这里,您也可以找到代码示例的示例。


推荐阅读