如何解决Google云端存储-使用PHP API重命名“目录”
我有一个Google Cloud Storage存储桶,如下所示:
bash-3.2$ gsutil ls gs://<my bucket name>/AR7020014/file_manager/
gs://<my bucket name>/AR7020014/file_manager/
gs://<my bucket name>/AR7020014/file_manager/2013-second-half-cancellations.csv
gs://<my bucket name>/AR7020014/file_manager/F59PH_860_High_resolution.jpeg
gs://<my bucket name>/AR7020014/file_manager/HostBuildZoneProcess.txt
gs://<my bucket name>/AR7020014/file_manager/office.jpg
gs://<my bucket name>/AR7020014/file_manager/4 Big McCarthy Lake Road/
gs://<my bucket name>/AR7020014/file_manager/6001 Johntown Creek Rd/
gs://<my bucket name>/AR7020014/file_manager/Listings/
gs://<my bucket name>/AR7020014/file_manager/Local_Utilities/
gs://<my bucket name>/AR7020014/file_manager/Rental_Documents/
gs://<my bucket name>/AR7020014/file_manager/TestBlog/
gs://<my bucket name>/AR7020014/file_manager/TestBlog/bobcat.png
gs://<my bucket name>/AR7020014/file_manager/TestBlog/testfile.png
我正在尝试使用StorageObject重命名功能。我有以下代码:
$bucket_name = '<my bucket name>';
$object_name = 'AR7020014/file_manager/TestBlog';
$bucket = $client->bucket($bucket_name );
$object = $bucket->object( $object_name );
echo "Object found,name = " . $object->name() . "\n";
这将产生:“找到对象,名称= AR7020014 / file_manager / TestBlog /”;
echo "Object info:\n";
print_r( $object->info() )
注意:如果我不附加“ /”,则name()函数有效,但info()函数 引发“找不到文件”异常。不一致。但是,当它起作用时:
Array
(
[kind] => storage#object
[id] => <my bucket name>/AR7020014/file_manager/TestBlog//1570061029345142
[selfLink] => https://www.googleapis.com/storage/v1/b/<my bucket name>/o/AR7020014%2Ffile_manager%2FTestBlog%2F
[mediaLink] => https://storage.googleapis.com/download/storage/v1/b/<my bucket name>/o/AR7020014%2Ffile_manager%2FTestBlog%2F?generation=1570061029345142&alt=media
[name] => AR7020014/file_manager/TestBlog/
[bucket] => <my bucket name>
<< stuff removed for some brevity >>
)
然后:
$new_name = 'AR7020014/file_manager/TestBlog-1';
$new_object = $object->rename( $new_name );
print_r($new_object);
这将产生:
Array
(
[kind] => storage#object
[id] => <my bucket name>/AR7020014/file_manager/TestBlog-1/1603307775687371
[selfLink] => https://www.googleapis.com/storage/v1/b/<my bucket name>/o/AR7020014%2Ffile_manager%2FTestBlog-1
[mediaLink] => https://storage.googleapis.com/download/storage/v1/b/<my bucket name>/o/AR7020014%2Ffile_manager%2FTestBlog-1?generation=1603307775687371&alt=media
[name] => AR7020014/file_manager/TestBlog-1
[bucket] => <my bucket name>
<< stuff removed for some brevity >>
)
但是...结果让我失望
bash-3.2$ gsutil ls gs://idx-acnt-gs.ihousedev.com/AR7020014/file_manager
gs://<my bucket name>/AR7020014/file_manager/
gs://<my bucket name>/AR7020014/file_manager/2013-second-half-cancellations.csv
gs://<my bucket name>/AR7020014/file_manager/F59PH_860_High_resolution.jpeg
gs://<my bucket name>/AR7020014/file_manager/HostBuildZoneProcess.txt
gs://<my bucket name>/AR7020014/file_manager/office.jpg
gs://<my bucket name>/AR7020014/file_manager/4 Big McCarthy Lake Road/
gs://<my bucket name>/AR7020014/file_manager/6001 Johntown Creek Rd/
gs://<my bucket name>/AR7020014/file_manager/Listings/
gs://<my bucket name>/AR7020014/file_manager/Local_Utilities/
gs://<my bucket name>/AR7020014/file_manager/Rental_Documents/
gs://<my bucket name>/AR7020014/file_manager/TestBlog/
gs://<my bucket name>/AR7020014/file_manager/TestBlog/bobcat.png
gs://<my bucket name>/AR7020014/file_manager/TestBlog/testfile.png
gs://<my bucket name>/AR7020014/file_manager/TestBlog-1
将我的“目录” TestBlog保留在原位,但是创建一个名为TestBlog-1的新“文件”。我们 已经为我们的用户实现了虚拟文件系统,这已经做得很好,但是对于 这-重命名目录。
解决方法
您在GCS中看到的文件结构只是可视的。如GCP documentation所述:
对于服务,对象 gs://your-bucket/abc/def.txt 只是一个 名称恰好带有“ /”字符的对象。没有 “ abc”目录;只是一个具有给定名称的对象。
因此,在您的情况下,TestBlog
本身并不是一个对象。
要rename对象,您首先需要复制它,为其赋予一个新名称,然后删除原始对象:
$bucket = $storage->bucket('[BUCKET-NAME]');
$object = $bucket->object('AR7020014/file_manager/TestBlog/test_file.txt');
$object->copy($bucket,['name' => 'AR7020014/file_manager/TestBlog-1/test_file.txt']);
$object->delete();
在TestBlog
下有多个对象,您将需要遍历它们,一一重命名。
这也可以使用gsutil
工具来完成:
gsutil mv -r \
gs://[BUCKET-NAME]/AR7020014/file_manager/TestBlog/* \
gs://[BUCKET-NAME]/AR7020014/file_manager/TestBlog-1/
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。