任何人都知道是否/哪里有有效的ObjectList过滤器阵列的文档?
该项目在github上的条目有一个很小的模糊,指示我API documentation,但也没有一个全面的列表,搜索'过滤器'只讨论容器,不是对象本身。
我有一个视频列表,每个视频有四种不同的格式,名称相同(无文件类型)。使用php-opencloud API,我想只获取其中一种视频格式(获取唯一的文件名而不是所有不同的格式)。
我认为使用过滤器是可行的方法,但我找不到任何可靠的文档。
之前有人必须这样做。帮助一个菜鸟?
答案 0 :(得分:1)
此页面上的大多数链接现已停止使用。这是php-opencloud文档的当前链接,其中包含使用前缀过滤objectList结果的示例:
我没有找到这方面的文档,但显然当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个对象发出新请求。我没有测试过这个,但它可能会引导你朝着正确的方向前进。