2012-06-15 14 views
9

bir yol vererek dosya kimliği almak için doğrudan bir yöntem var mı (ör. /some/folder/deep/inside/file.txt)? Bunun klasörün içeriğini tekrar tekrar kontrol ederek yapılabileceğini biliyorum, ancak basit bir çağrı çok daha iyi olurdu.Belirli bir yolun dosya kimliğini al

Teşekkür

cevap

3

Şu anda bu konudaki desteğin yok, ama biz v2 API dışarı oluşturmaya devam olarak geribildirim kesinlikle dikkate alınacaktır.

+0

Konuyla ilgili herhangi bir haber var mı? Mevcut V2 API'sinin henüz bu işlevselliğe sahip olmadığı görünüyor. Box ile çalışmak için mevcut mantığı "daha kolay" hale getirmeyi çok daha kolaylaştıracağım! –

+0

, ikinci. Herkesin bir klasör klasörünün tümünün içinden geçerek yineleme yapmak zorunda kalması gerçekten de çok verimsizdir. – Ian1971

+2

numaralı üçlü bir alt klasör bulun. Sadece Box API'yi, mevcut arka planlar (dropbox, GDrive, WebDAV, vb.) Yanı sıra, sadece benim çene bırakmamı desteklemiyorsa, Hazaar MVC için bir dosya sistemi arka planı olarak uygulamaya çalışıyorum. Bunu yazdığım bir proje, klasörlerin derinliklerinde 20 seviyeye sahip olabilir, bu yüzden sadece tek bir dosyanın fileID'sini almak için 20 istekte bulunmak zorundayım? Foke şakası. Ve Google Drive ile çalışmanın kötü olduğunu düşündüm ..... –

0

Buna bir alternatif yolundan hedef dosya/klasör adı ayıklamak ve arama API böyle

kullanarak arama olacaktır: https://api.box.com/2.0/search?query=filename.txt

Bu ile eşleşen tüm girişlerini geri verir onların Her giriş için tüm hiyerarşiyi sağlayan path_collections. Böyle bir şey: /dummy/filename.txt

Sadece aradığınız yolu karşı bu yolu karşılaştırmak olarak bu giriş için

"path_collection": { 
       "total_count": 2, 
       "entries": [ 
        { 
         "type": "folder", 
         "id": "0", 
         "sequence_id": null, 
         "etag": null, 
         "name": "All Files" 
        }, 
        { 
         "type": "folder", 
         "id": "2988397987", 
         "sequence_id": "0", 
         "etag": "0", 
         "name": "dummy" 
        } 
       ] 
      } 

Yol ters mühendislik edilebilir. Eşleşirse, aradığınız sonuç budur. Bu, sonuca ulaşmak için yapmanız gereken ReST çağrılarının sayısını azaltmaktır. Umarım mantıklıdır.

+0

Mantıklı, ancak sadece benzersiz dosya isimleriniz varsa işe yarar, aynı ada sahip 2 dosyaya sahip olduğunuz anda bu mantığı artık uygulayamayacaksınız. Belirtmek gerekir ki, kapsamı sınırlamaksızın tüm taban üzerinde bir arama yapan milyonlarca dosya için gerçekten etkili bir yaklaşım değildir. –

+0

yukarıdaki bağlantı işe yaramaz: | – 9codie05

0

Tüm ağaca yinelemeli olarak girmeden, bir yola dayalı bir klasör kimliğinin nasıl alınacağı konusundaki yaklaşımım bu, dosya için de kolayca uyarlanabilir. Bu PHP ve CURL dayanmaktadır, ancak başka bir uygulamada da kullanmak çok kolay:

//WE SET THE SEARCH FOLDER: 
$search_folder="XXXX/YYYYY/ZZZZZ/MMMMM/AAAAA/BBBBB"; 

//WE NEED THE LAST BIT SO WE CAN DO A SEARCH FOR IT 
$folder_structure=array_reverse (explode("/",$search_folder)); 

// We run a CURL (I'm assuming all the authentication and all other CURL parameters are already set!) to search for the last bit, if you want to search for a file rather than a folder, amend the search query accordingly 
curl_setopt($curl, CURLOPT_URL, "https://api.box.com/2.0/search?query=".urlencode($folder_structure[0])."&type=folder");  

// Let's make a cine array out of that response 
$json=json_decode(curl_exec($curl),true); 
$i=0; 
$notthis=true; 

// We need to loop trough the result, till either we find a matching element, either we are at the end of the array 
while ($notthis && $i<count($json['entries'])) { 
    $result_info=$json['entries'][$i]; 

    //The path of each search result is kept in a multidimensional array, so we just rebuild that array, ignoring the first element (that is Always the ROOT) 
    if ($search_folder == implode("/",array_slice(array_column($result_info['path_collection']['entries'],'name'),1))."/".$folder_structure[0]) 
     { 
     $notthis=false; 
     $folder_id=$result_info['id']; 
     } 
     else 
     { 
     $i++; 
     } 
    } 
if ($notthis) {echo "Path not found....";} else {echo "Folder id: $folder_id";}