Mengganti Nama Folder/Kontainer Rackspace

Saya memiliki perpustakaan PHP dari Rackspace. Kami menyimpan semua file dalam Wadah yang disebut 'data'. Di dalam wadah itu terdapat direktori file hierarkis.

Saya dapat mengganti nama atau memindahkan objek, tidak ada masalah (dibungkus dalam kelas saya sendiri):

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

Tapi saya tidak bisa melakukan hal yang sama dengan folder:

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

Jadi saya berpikir, saya akan memasukkan semua objek ke dalam folder dan menyalinnya satu per satu. Tapi saya hanya bisa mendapatkan objek dalam sebuah wadah:

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

ini tidak berhasil:

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

Bagaimana cara mengganti nama folder? Atau alternatifnya, pindahkan semua objek dalam satu folder ke yang baru?


person Guillermo Phillips    schedule 17.04.2013    source sumber


Jawaban (2)


Anda dapat membuat daftar objek berdasarkan folder semu dengan menentukan awalan dalam panggilan list_objects() Anda. Berikut adalah penggunaan fungsinya:

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

Jadi sesuatu seperti ini seharusnya berhasil:

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

Anda kemudian mengulangi dan menyalin semua objek yang dikembalikan.

-Tanda

person magglass1    schedule 24.04.2013
comment
Saya akan mengambil jawaban ini, karena inilah yang perlu saya ketahui. Dan Anda membutuhkan poinnya! - person Guillermo Phillips; 25.04.2013

Masalahnya di sini adalah tidak ada folder di dalam wadah. Wadahnya adalah pengelompokan tingkat atas, dan di bawahnya hanya ada sekumpulan objek.

Objek Anda memiliki pemisah direktori di namanya sehingga dapat dirujuk seperti itu di URL. Pada kenyataannya, mereka hanyalah objek individual dengan awalan serupa di namanya; mereka sebenarnya tidak dikelompokkan "berdasarkan folder".

Saya bukan programmer PHP, tapi inilah beberapa pseudocode (mungkin tidak tepat):

Diedit untuk menggunakan fungsi yang disediakan oleh @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
Saya akan memberikan poin pada jawaban ini, karena ini lebih menyeluruh daripada jawaban yang saya terima. - person Guillermo Phillips; 25.04.2013