[英]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_id和GET项目/: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.