簡體   English   中英

來自BIM360 Doc Plans文件夾的API下載文件

[英]API Download File from BIM360 Doc Plans folder

我正在嘗試使用Forge API從Autodesk BIM360 Doc( https://docs.b360.autodesk.com )下載文件,以便隨后可以將這些文件保存到我們的本地存儲中。

我已設法使用數據管理API從“Project Files”文件夾下載任何文件https://forge.autodesk.com/en/docs/data/v2/reference/http/projects-project_id-versions-version_id-GET/ ,我可以使用data.relationships.storage.data.id獲取存儲ID。

但是使用相同的API,在“Plan”文件夾下查詢文件時無法獲取存儲ID,

那么有什么方法可以使用Forge API從Plan文件夾下載文件嗎? 任何幫助表示贊賞。

Plan文件夾中列出的項目是一種items:autodesk.bim360:Document ,此類型項目的GET版本/:version_idGET項目/:item_id的響應中不會顯示存儲屬性。

要獲取物理文件位置,您應該調用GET版本/:version_id / relationships / refs ,請參閱此處查找類似的線程: 使用Autodesk API下載文檔

復制項目的更新

在通過GET版本/:version_id / relationships / refs訪問復制項目版本的關系數據時,您會看到一個數據屬性,根據我的經驗告訴復制項目和源項目之間的關系:

"data": [
    {
        "type": "versions",
        "id": "urn:adsk.wipprod:fs.file:vf.34Xvlw1jTcSQ_XkIVh07cg?version=2",
        "meta": {
            "refType": "derived",
            "fromId": "urn:adsk.wipprod:fs.file:vf.34Xvlw1jTcSQ_XkIVh07cg?version=2",
            "fromType": "versions",
            "toId": "urn:adsk.wipprod:fs.file:vf.y3L7YbfAQJWwumMgqjJUxg?version=1",
            "toType": "versions",
            "direction": "to",
            "extension": {
                "type": "derived:autodesk.bim360:CopyDocument",
                "version": "1.0",
                "schema": {
                    "href": "https://developer.api.autodesk.com/schema/v1/versions/derived:autodesk.bim360:CopyDocument-1.0"
                },
                "data": {}
            }
        }
    }
],  

之后,您必須通過調用GET版本/:version_id / relationships / refs來訪問fromId的版本關系數據。

在這種情況下,它是{PROJ_ID}/versions/urn:adsk.wipprod:fs.file:vf.34Xvlw1jTcSQ_XkIVh07cg%3Fversion=2/relationships/refs ,然后您將在我的調查中看到響應中的storage屬性。

為了防止其他人遇到同樣的問題,我發布了我最終設法獲取文件存儲信息的代碼。 但是,請隨意建議其他方法,而不是迭代到完整的關系樹。

internal static ForgeFileInfo getItemVersion(string token, string projectID, string versionID)
    {
        ForgeFileInfo forgeFileInfo = new ForgeFileInfo();

        ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
        versionApi.Configuration.AccessToken = token;
        var version = versionApi.GetVersion(projectID, versionID);
        string fileType = version.data.attributes.extension.type;
        switch (fileType) {
            case "versions:autodesk.bim360:File":
                //File from Project File library or is regual file
                forgeFileInfo.FileName = version.data.attributes.displayName;
                forgeFileInfo.FileLocation = version.data.relationships.storage.meta.link.href;
                forgeFileInfo.StorageId = version.data.relationships.storage.data.id;
                return forgeFileInfo;
            case "versions:autodesk.bim360:Document":
                //File from Plan Library
                var versionRelationship=versionApi.GetVersionRelationshipsRefs(projectID, versionID);

                // the GET Relationship has data node where we can get the related document
                var relationshipData = new DynamicDictionaryItems(versionRelationship.data);
                // let's start iterating the relationship DATA
                foreach (KeyValuePair<string, dynamic> relationshipItem in relationshipData)
                {
                    //Have to loop until we found "derived:autodesk.bim360:FileToDocument"
                    var relationType = relationshipItem.Value.meta.extension.type;
                    var relation = relationshipItem.Value.meta.direction;
                    if ("derived:autodesk.bim360:FileToDocument".Equals(relationType))
                    {
                        if ("to".Equals(relation))
                        {
                            //Go up stream
                            return getItemVersion(token, projectID, relationshipItem.Value.id);
                        }
                    }
                    else if ("derived:autodesk.bim360:CopyDocument".Equals(relationType))
                    {
                        if ("to".Equals(relation))
                        {
                            //Go up stream
                            return getItemVersion(token, projectID, relationshipItem.Value.id);
                        }
                        continue;
                    }               
                }
                break;
        }
        return forgeFileInfo;
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM