首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rackspace - php-opencloud过滤器-有效ObjectList过滤器的文档?

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

Stack Overflow用户
提问于 2013-08-12 17:54:53
回答 3查看 853关注 0票数 1

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

该项目在github上的条目上有一个很小的信息,可以告诉我API文档,但它也没有一个全面的列表,而且搜索“过滤器”时只讨论容器,而不是对象本身。

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

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

一定有人以前做过这种事。帮个菜鸟?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-08-13 18:09:54

正如格伦所指出的,目前还不支持服务在对象上应用过滤器。您可能感兴趣的唯一事情是提供一个前缀,它允许您根据文件名的启动方式来细化返回的对象。因此,如果您发送'bobcatscuddling‘作为前缀,您将得到所有相关的视频格式,为这一记录。

看来,您唯一的选择是取回所有对象并遍历集合:

代码语言:javascript
复制
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个对象提出新的请求。我还没有测试过这个,但它可能会引导你走向正确的方向。

票数 0
EN

Stack Overflow用户

发布于 2015-04-01 22:59:44

这个页面上的大多数链接现在都死了。下面是指向php-opencloud文档的当前链接,其中包括使用前缀筛选objectList结果的示例:

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

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

代码语言:javascript
复制
GET /v1/MossoCloudFS_0672d7fa-9f85-4a81-a3ab-adb66a880123/AppleType?limit=2&marker=grannysmith

等于

代码语言:javascript
复制
$container->objectList(array('limit'=>'2', 'marker'=>'grannysmith'));
票数 1
EN

Stack Overflow用户

发布于 2013-08-13 03:29:45

不幸的是,底层API不支持对Swift/Cloud容器(cf )中的对象进行过滤。Objects-d1e1284.html)。$filter参数被支持作为共享代码的一部分,但实际上它在这里并不对Cloud做任何事情。

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18193501

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档