php -rack -Space Cloudfiles API检查文件路径是否已经存在



我正在使用Rackspace CloudFiles API,在该cludfiles API中,我需要检查容器内是否存在文件夹。

我已经在不同的区域进行了搜索,我可以找到解决方案以查找是否存在容器或物体。

例如:

格式:容器/文件夹/subfolder/file

实际文件存储的位置: test/test_folder/test_subfolder/test.txt

我想知道我的容器已经有一个名为 test_folder

的文件夹

我遇到了一些说路径的东西,但是不确定我们是否存在这种方法!

getObjects ->> 'path', 'file path to search'

我在PHP或Guzzle的背景下无法真正回答这个问题,但是我可以在云文件和一些命令行curl示例上提供一些可能会有所帮助的信息。

rackspace云文件实际上没有容器内"文件夹"的概念。您有一个带有以下作品的URL: https://{storege_endpoint}/{account_name}/{container_name}/{object_name}

>

但是,您可以通过使用名称中的"/"字符创建对象来模拟文件夹。然后,在执行容器列表时,您可以设置"前缀"one_answers"定界符"查询字符串参数以模仿类似文件夹的行为。

例如,假设您对容器的列表列出以查看所有对象:

$ curl -i -XGET -H"x-auth-token: $AUTH_TOKEN" https://storage101.iad3.clouddrive.com/v1/$ACCOUNT_NAME/$CONTAINER_NAME                       
HTTP/1.1 200 OK
...
Date: Thu, 01 Dec 2016 02:16:53 GMT
foo/file1.txt
foo/bar/file2.txt
baz/file3.txt
baz/file4.txt

在这里,我们有四个名为" foo/file1.txt"的对象," foo/bar/file2.txt"," baz/file3.txt"one_answers" baz/file4.txt"。

测试文件夹" foo"存在的最简单方法是将" foo/"的前缀设置为"/"定界符:

$ curl -i -XGET -H"x-auth-token: $AUTH_TOKEN" https://storage101.iad3.clouddrive.com/v1/$ACCOUNT_NAME/$CONTAINER_NAME?prefix=foo/&delimiter=/
HTTP/1.1 200 OK
...
Date: Thu, 01 Dec 2016 02:16:45 GMT
foo/file1.txt
foo/bar/file2.txt

您可以看到,如果该前缀存在任何对象,则返回HTTP 200以及与前缀匹配的对象的列表一起返回。如果该前缀不存在对象,则不存在"文件夹",并且将返回HTTP 204。

如果您现在想测试" subfolter"内部" foo",则可以执行另一个容器列表,将前缀更改为" foo/bar/",并保留"/".pin.

此外,如果要创建一个文件夹" images"并包含" cat.jpg",则不需要先创建一个文件夹,只需创建一个称为" images/cat.jpg"的对象包含cat.jpg。

的数据

您可以在此处找到有关Rackspace Cloud Files和伪层次结构文件夹的更多信息:https://developer.rackspace.com/docs/cloud-files/v1/general-api-info/pseudo-hierarchical-folders-and-directories/

即使@hurricanerix的答案帮助了我,我想发布精确的PHP方法和摘要来帮助其他。

$client = new Rackspace(Rackspace::US_IDENTITY_ENDPOINT, array(
    'username' => 'XXXXXXXX',
    'apiKey'   => 'XXXXXXXXXXXXXXXXXXX'
));
$total              = 0;
$containerObjects   = array();
$objectStoreService = $client->objectStoreService(null, 'XX');
$container          = $objectStoreService->getContainer('test');
$objData = $container->ObjectList(array('prefix'=>"test_folder/", 'delimiter'=>"/"));
if(is_object($objData))
{
    $total = $objData->count();
    if ($total == 0)
        break;
    foreach ($objData as $object) {
        $containerObjects[] = $object->getName();
    }
}
var_dump($containerObjects);

输出

array (size=1)
  0 => string 'test/test_folder/test_subfolder/' (length=32)

希望这会有所帮助。

相关内容

  • 没有找到相关文章

最新更新