Переименование папки/контейнера Rackspace

У меня есть библиотека PHP от Rackspace. Мы храним все файлы в контейнере под названием «данные». Внутри этого контейнера находится иерархический каталог файлов.

Я могу переименовать или переместить объект, без проблем (завернутый в мой собственный класс):

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

Как я могу переименовать папку? Или, как вариант, переместить все объекты из папки в новую?


person Guillermo Phillips    schedule 17.04.2013    source источник


Ответы (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/');

Затем вы перебираете и копируете все возвращенные объекты.

-Отметка

person magglass1    schedule 24.04.2013
comment
Я приму этот ответ, так как это именно то, что мне нужно было знать. И вам нужны баллы! - person Guillermo Phillips; 25.04.2013

Проблема здесь в том, что внутри контейнера нет такой вещи, как папка. Контейнер — это группа верхнего уровня, а под ней — просто набор объектов.

Ваши объекты имеют разделители каталогов в своих именах, чтобы на них можно было ссылаться таким образом в 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);
};
person phoebus    schedule 24.04.2013
comment
Я дам этому ответу точку, так как он более тщательный, чем ответ, который я принял. - person Guillermo Phillips; 25.04.2013