任何人都知道是否/哪里有有效的ObjectList过滤器数组的文档?
该项目在github上的条目上有一个很小的信息,可以告诉我API文档,但它也没有一个全面的列表,而且搜索“过滤器”时只讨论容器,而不是对象本身。
我有一个视频列表,每一个都有四种不同的格式,命名为相同的东西(sans文件类型)。使用php-opencloud,我只想获得其中的一种视频格式(获取唯一的文件名,而不是其所有不同的格式)。
我认为使用过滤器是可行的方法,但我找不到任何可靠的文档。
一定有人以前做过这种事。帮个菜鸟?
发布于 2013-08-13 18:09:54
正如格伦所指出的,目前还不支持服务在对象上应用过滤器。您可能感兴趣的唯一事情是提供一个前缀,它允许您根据文件名的启动方式来细化返回的对象。因此,如果您发送'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个对象提出新的请求。我还没有测试过这个,但它可能会引导你走向正确的方向。
发布于 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方法调用中的参数,如下所示:
GET /v1/MossoCloudFS_0672d7fa-9f85-4a81-a3ab-adb66a880123/AppleType?limit=2&marker=grannysmith等于
$container->objectList(array('limit'=>'2', 'marker'=>'grannysmith'));发布于 2013-08-13 03:29:45
不幸的是,底层API不支持对Swift/Cloud容器(cf )中的对象进行过滤。Objects-d1e1284.html)。$filter参数被支持作为共享代码的一部分,但实际上它在这里并不对Cloud做任何事情。
我会看看是否能更新文档以反映这一点。
https://stackoverflow.com/questions/18193501
复制相似问题