[英]Rackspace - php-opencloud filters - Documentation for valid ObjectList filters?
此頁面上的大多數鏈接現在已失效。 這是php-opencloud文檔的當前鏈接,其中包括一個使用前綴過濾objectList結果的示例:
我沒有找到有關此文檔的文檔,但是很顯然,當Rackspace Cloud Files文檔提到查詢字符串中的參數時,這些參數轉換為objectList方法調用中的參數,如下所示:
GET /v1/MossoCloudFS_0672d7fa-9f85-4a81-a3ab-adb66a880123/AppleType?limit=2&marker=grannysmith
等於
$container->objectList(array('limit'=>'2', 'marker'=>'grannysmith'));
不幸的是,底層API不支持對Swift / Cloud Files容器中的對象進行過濾(請參閱http://docs.rackspace.com/files/api/v1/cf-devguide/content/List_Objects-d1e1284.html )。 共享代碼的一部分支持$filter
參數,但實際上這里的Cloud Files沒有任何作用。
我將查看是否可以更新文檔以反映這一點。
正如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個對象提出一個新請求。 我尚未對此進行測試,但是它可能會引導您朝着正確的方向發展。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.