【问题标题】:Renaming Rackspace Folder/Container重命名 Rackspace 文件夹/容器
【发布时间】:2013-04-17 09:41:20
【问题描述】:

我有来自 Rackspace 的 PHP 库。我们将所有文件保存在一个名为“数据”的容器中。在该容器中是一个分层的文件目录。

我可以重命名或移动对象,没问题(包装在我自己的类中):

    $this->container->move_object_to('uploads/files/file.txt', 'data', 'uploads/files2/filecopy.txt');

但我不能对文件夹做同样的事情:

    $this->container->move_object_to('uploads/files', 'data', 'uploads/files2');

所以我想相反,我会将所有对象放在一个文件夹中并单独复制每个对象。但我只能在容器中获取对象:

    $container = $this->connection->get_container('data');
    $files = $container->list_objects();

这不起作用:

    $container = $this->connection->get_container('data/uploads');
    $files = $container->list_objects();

如何重命名文件夹?或者,将文件夹中的所有对象移动到新文件夹中?

【问题讨论】:

    标签: php rackspace-cloud


    【解决方案1】:

    这里的问题是容器内没有文件夹这样的东西。容器是最顶层的分组,在它之下只是一组对象。

    您的对象的名称中有目录分隔符,以便在 URL 中以这种方式引用它们。实际上,它们只是名称中具有相似前缀的单个对象;它们实际上并没有“按文件夹”分组。

    我不是 PHP 程序员,但这里有一些伪代码(可能不准确):

    编辑使用@magglass1提供的功能

    $old_dir = "oldir/";
    $new_dir = "newdir/";
    $container = $this->connection->get_container('data');
    $files = $container->list_objects(0, NULL, $old_dir);
    foreach ($files as $file) {
        $new_filename = substr_replace($file, $new_dir, strpos($file, $old_dir), strlen($old_dir));
        $this->container->move_object_to($file, 'data', $new_filename);
    };
    

    【讨论】:

    • 我会给这个答案一个点,因为它比我接受的答案更彻底。
    【解决方案2】:

    您可以通过在 list_objects() 调用中指定前缀来按伪文件夹列出对象。下面是函数的用法:

    list_objects($limit=0, $marker=NULL, $prefix=NULL, $path=NULL)
    

    所以类似这样的东西应该可以工作:

    $container = $this->connection->get_container('data');
    $files = $container->list_objects(0, NULL, 'uploads/');
    

    然后您将遍历并复制所有返回的对象。

    -马克

    【讨论】:

    • 我会接受这个答案,因为这正是我需要知道的。你需要积分!
    猜你喜欢
    • 1970-01-01
    • 2020-03-27
    • 2014-09-09
    • 1970-01-01
    • 2018-08-01
    • 2016-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多