12

有没有通过给出路径(例如/some/folder/deep/inside/file.txt)来获取文件ID的直接方法?我知道这可以通过递归检查文件夹的内容来完成,但是一个简单的调用会好得多。

谢谢

4

3 回答 3

4

我们目前不对此提供支持,但在我们继续构建 v2 API 时肯定会考虑反馈。

于 2012-06-15T23:41:30.480 回答
0

另一种方法是从路径中提取目标文件/文件夹名称并使用搜索 API 进行搜索

像这样:https ://api.box.com/2.0/search?query=filename.txt

这将返回所有匹配的条目及其 path_collections,为每个条目提供整个层次结构。像这样的东西:

 "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"
                    }
                ]
           }

此条目的路径可以反向工程为/dummy/filename.txt

只需将此路径与您正在寻找的路径进行比较。如果匹配,那么这就是您要查找的搜索结果。这只是为了减少获得结果所需的 ReST 调用次数。希望这是有道理的。

于 2015-06-30T11:16:54.173 回答
0

这是我关于如何根据路径获取文件夹 id 的方法,而不是递归地遍历整个树,这也可以很容易地适应文件。这是基于 PHP 和 CURL 的,但也很容易在任何其他应用程序中使用它:

//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";}
于 2016-02-16T22:44:01.370 回答