2013-04-17 2 views
2

У меня есть библиотека PHP из Rackspace. Мы сохраняем все файлы в контейнере под названием «данные». Внутри этого контейнера находится иерархический каталог файлов.Переименование папки Rackspace Folder/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(); 

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

ответ

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

+0

Я отвечу на этот вопрос, так как это именно то, что мне нужно знать. И вам нужны очки! –

3

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

В ваших объектах есть разделители каталогов в своих именах, чтобы их можно было называть в URL-адресах. На самом деле это только отдельные объекты с похожими префиксами в их именах; они фактически не группируются «по папке».

Я не PHP программист, но вот некоторые псевдокод (не может быть точным):

Edited использовать функцию, предоставленную @ 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); 
}; 
+0

Я расскажу об этом ответе, поскольку он более тщательный, чем тот, который я принял. –