1

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

该项目在github上的条目上有一个小小的说明,将我引导到API 文档,但这也没有一个完整的列表,并且在“过滤器”上的搜索只讨论容器,而不是对象本身。

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

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

以前一定有人这样做过。帮助一个菜鸟?

4

3 回答 3

1

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

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

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

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

等于

$container->objectList(array('limit'=>'2', 'marker'=>'grannysmith'));
于 2015-04-01T22:59:44.113 回答
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 个对象发出一个新请求。我没有对此进行测试,但它可能会引导您朝着正确的方向前进。

于 2013-08-13T18:09:54.240 回答
0

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

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

于 2013-08-13T03:29:45.820 回答