Google云端存储-使用PHP API重命名“目录”

如何解决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 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)&gt; insert overwrite table dwd_trade_cart_add_inc &gt; select data.id, &gt; data.user_id, &gt; data.course_id, &gt; date_format(
错误1 hive (edu)&gt; insert into huanhuan values(1,&#39;haoge&#39;); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive&gt; show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 &lt;configuration&gt; &lt;property&gt; &lt;name&gt;yarn.nodemanager.res