重命名Rackspace文件夹/容器

时间:2013-04-17 09:41:20

标签: php rackspace-cloud

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

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

    $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();

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

2 个答案:

答案 0 :(得分:3)

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

您的对象的名称中包含目录分隔符,以便在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);
};

答案 1 :(得分:1)

您可以通过在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/');

然后循环并复制所有返回的对象。

-Mark