1

저는 Rackspace CloudFiles API를 사용하여 컨테이너 내부에 폴더가 있는지 확인해야합니다.PHP - Rackspace CloudFiles API는 파일 경로가 이미 존재하는지 확인합니다.

컨테이너가 있는지 또는 개체가 있는지를 찾는 해결책을 찾을 수있는 여러 영역을 검색했습니다.

예를 들어

:

형식 : 용기/폴더/하위 폴더/파일

실제 파일 저장 위치 : test/test_folder/test_subfolder/test.txt

내가 알고 싶은

이 내 컨테이너가 이미 가지고있는 폴더 test_folder

그리고 나는 길을 말하는 무언가를 발견했지만, 우리는이 방법이 존재한다는 것을 확신하지 못했습니다!

getObjects ->> 'path', 'file path to search' 

답변

1

, 나는 정확한 PHP 방법을 게시 할 미래는 다른 도움 니펫을. 이 도움이 될 것입니다

$client = new Rackspace(Rackspace::US_IDENTITY_ENDPOINT, array(
    'username' => 'XXXXXXXX', 
    'apiKey' => 'XXXXXXXXXXXXXXXXXXX' 
)); 

$total    = 0; 
$containerObjects = array(); 
$objectStoreService = $client->objectStoreService(null, 'XX'); 
$container   = $objectStoreService->getContainer('test'); 
$objData = $container->ObjectList(array('prefix'=>"test_folder/", 'delimiter'=>"/")); 
if(is_object($objData)) 
{ 
    $total = $objData->count(); 
    if ($total == 0) 
     break; 

    foreach ($objData as $object) { 
     $containerObjects[] = $object->getName(); 
    } 
} 

var_dump($containerObjects); 

출력

array (size=1) 
    0 => string 'test/test_folder/test_subfolder/' (length=32) 

희망.

1

정말 PHP 또는 목구멍의 맥락에서이 질문에 대답 할 수없는,하지만 난 클라우드 파일에 대한 몇 가지 정보와 도움이 될 몇 가지 명령 줄 컬 예제를 제공 할 수 있습니다.

Rackspace Cloud Files에는 실제로 컨테이너 내에 "폴더"라는 개념이 없습니다. https : // {storage_endpoint}/{account_name}/{container_name}/{object_name}

이름에 "/"문자가있는 개체를 생성하여 폴더를 에뮬레이트 할 수 있습니다 . 그런 다음 컨테이너 목록을 수행 할 때 "접두사"및 "구분 기호"쿼리 문자열 매개 변수를 설정하여 폴더와 같은 동작을 에뮬레이트 할 수 있습니다.

다음
$ curl -i -XGET -H"x-auth-token: $AUTH_TOKEN" https://storage101.iad3.clouddrive.com/v1/$ACCOUNT_NAME/$CONTAINER_NAME      
HTTP/1.1 200 OK 
... 
Date: Thu, 01 Dec 2016 02:16:53 GMT 

foo/file1.txt 
foo/bar/file2.txt 
baz/file3.txt 
baz/file4.txt 

우리가 "foo는 /은 File2.txt"라는 네 개의 객체, "foo는/바/file2.txt : 예를 들어

, 당신은 모든 물체를 확인하기 위해 용기의 목록을 말한다 ","baz/file3.txt "및"baz/file4.txt "가 있습니다.

폴더 "foo는"의 존재 여부를 테스트하는 가장 쉬운 방법 접두사를 설정하는 것에 "foo는 /"와 구분 기호 "/"로 다음하기 :

$ curl -i -XGET -H"x-auth-token: $AUTH_TOKEN" https://storage101.iad3.clouddrive.com/v1/$ACCOUNT_NAME/$CONTAINER_NAME?prefix=foo/&delimiter=/ 
HTTP/1.1 200 OK 
... 
Date: Thu, 01 Dec 2016 02:16:45 GMT 

foo/file1.txt 
foo/bar/file2.txt 

당신이 볼 수 있듯이 , 그 접두사를 가진 객체가 있으면 접두어와 일치하는 객체의 목록과 함께 HTTP 200이 반환됩니다. 해당 접두어가있는 개체가 없으면 "폴더"가없고 HTTP 204가 반환됩니다.

"foo"안에 "하위 폴더"를 테스트하려면 접두어를 "foo/bar /"로 변경하고 구분 기호를 "/"로 유지하면서 다른 컨테이너 목록을 수행하면됩니다.

"이미지"폴더를 만들고 "cat.jpg"가 포함되도록하려면 먼저 폴더를 만들 필요가 없으며 "images/cat.jpg"라는 개체를 만듭니다. cat.jpg에 대한 데이터가 들어 있습니다.

현재 랙 스페이스 클라우드 파일 및 의사 계층 폴더에 대한 자세한 정보를 확인할 수 있습니다 @hurricanerix 대답은 나에게 도움이 비록 https://developer.rackspace.com/docs/cloud-files/v1/general-api-info/pseudo-hierarchical-folders-and-directories/

+0

덕분에 많은 도움이되었습니다. –