Rackspace - php-opencloud filters - 有效ObjectList过滤器的文档?

时间:2013-08-12 17:54:53

标签: php rackspace-cloud

任何人都知道是否/哪里有有效的ObjectList过滤器阵列的文档?

该项目在github上的条目有一个很小的模糊,指示我API documentation,但也没有一个全面的列表,搜索'过滤器'只讨论容器,不是对象本身。

我有一个视频列表,每个视频有四种不同的格式,名称相同(无文件类型)。使用php-opencloud API,我想只获取其中一种视频格式(获取唯一的文件名而不是所有不同的格式)。

我认为使用过滤器是可行的方法,但我找不到任何可靠的文档。

之前有人必须这样做。帮助一个菜鸟?

3 个答案:

答案 0 :(得分:1)

此页面上的大多数链接现已停止使用。这是php-opencloud文档的当前链接,其中包含使用前缀过滤objectList结果的示例:

http://docs.php-opencloud.com/en/latest/services/object-store/objects.html#list-objects-in-a-container

我没有找到这方面的文档,但显然当Rackspace Cloud Files documentation提到查询字符串中的参数时,那些会转换为objectList方法调用中的参数,如下所示:

GET /v1/MossoCloudFS_0672d7fa-9f85-4a81-a3ab-adb66a880123/AppleType?limit=2&marker=grannysmith

等于

$container->objectList(array('limit'=>'2', 'marker'=>'grannysmith'));

答案 1 :(得分:0)

不幸的是,底层API不支持过滤Swift / Cloud Files容器中的对象(参见http://docs.rackspace.com/files/api/v1/cf-devguide/content/List_Objects-d1e1284.html)。 $filter参数作为共享代码的一部分受支持,但它实际上并未对此处的云文件执行任何操作。

我会看看我是否可以更新文档来反映这一点。

答案 2 :(得分:0)

正如Glen指出的那样,服务不支持(目前)在对象上应用过滤器。您可能感兴趣的唯一事情是提供一个前缀,它允许您根据文件名的开始细化返回的对象。因此,如果您发送'bobcatscuddling'作为前缀,您将获得该录制的所有相关视频格式。

似乎唯一的选择是取回所有对象并遍历集合:

use OpenCloud\Rackspace;

$connection = new Rackspace(RACKSPACE_US, array(
   'username' => 'foo', 
   'apiKey' => 'bar'
)); 
$service = $connection->objectStore('cloudFiles', 'DFW', 'publicURL');

$container = $service->container('CONTAINER_NAME');

$processedObjects = array();
$marker = '';

while ($marker !== null) {

    $objects = $container->objectList('marker' => $marker); 
    $total   = $objects->count();
    $count   = 0;

    while ($object = $objects->next()) {

        // Extract the filename
        $filename = pathinfo($object->name, PATHINFO_FILENAME);

        // Make sure you only deal with the filename once (i.e. to ignore different extensions)
        if (!in_array($processedObjects, $filename)) {

            // You can do your DB check here...

            // Stock the array
            $processedObjects[] = $filename;
        }

        $count++;
        $marker = ($count == $total) ? $object->name : null;
    }

}

您会注意到,您正在递增标记并为每10,000个对象发出新请求。我没有测试过这个,但它可能会引导你朝着正确的方向前进。