簡體   English   中英

重命名Rackspace文件夾/容器

[英]Renaming Rackspace Folder/Container

我有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();

如何重命名文件夾? 或者,將文件夾中的所有對象移到新對象?

這里的問題是容器內沒有文件夾之類的東西。 容器是頂層分組,在其之下只是一組對象。

您的對象名稱中包含目錄分隔符,以便可以在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);
};

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

然后,您將遍歷並復制所有返回的對象。

-標記

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM