如何使用BIM360 API下载数据库模型版本

问题描述 投票:0回答:1

大家好,Autodesk Forge 团队: 我可以知道我怎样才能 仅使用 BIM 360 API 即可做到这一点,我们是否需要模型导数才能下载?

https://developer.api.autodesk.com/construction/index/v2/projects/{{PROJECTID}}/indexes/{{VERSIONID}}/manifest

任何帮助表示赞赏!

autodesk-forge
1个回答
0
投票

偏移量、属性等的字符串值是

derivativeUrn
,因此我们可以使用 GET {urn}/manifest/{derivativeurn}/signedcookies 下载它。

这是 .NET 的代码片段

var restSharpClient = new RestClient("https://developer.api.autodesk.com");

RestRequest request = new RestRequest("/modelderivative/v2/designdata/{urn}/manifest/{derivativeUrn}/signedcookies", RestSharp.Method.Get);
request.AddHeader("Authorization", "Bearer " + accessToken);
request.AddUrlSegment("urn", urn);
request.AddUrlSegment("derivativeUrn", derivativeUrn);

var response = await restSharpClient.ExecuteAsync(request);

var cloudFrontPolicyName = "CloudFront-Policy";
var cloudFrontKeyPairIdName = "CloudFront-Key-Pair-Id";
var cloudFrontSignatureName = "CloudFront-Signature";

var cloudFrontCookies = response.Headers
                        .Where(x => x.Name == "Set-Cookie")
                        .Select(x => x.Value)
                        .Cast<string>()
                        .ToList();

var cloudFrontPolicy = cloudFrontCookies.Where(value => value.Contains(cloudFrontPolicyName)).FirstOrDefault()?.Trim().Substring(cloudFrontPolicyName.Length + 1).Split(";").FirstOrDefault();
var cloudFrontKeyPairId = cloudFrontCookies.Where(value => value.Contains(cloudFrontKeyPairIdName)).FirstOrDefault()?.Trim().Substring(cloudFrontKeyPairIdName.Length + 1).Split(";").FirstOrDefault();
var cloudFrontSignature = cloudFrontCookies.Where(value => value.Contains(cloudFrontSignatureName)).FirstOrDefault()?.Trim().Substring(cloudFrontSignatureName.Length + 1).Split(";").FirstOrDefault();

var result = JsonConvert.DeserializeObject<dynamic>(response.Content);
var downloadURL = $"{result.url}?Key-Pair-Id={cloudFrontKeyPairId}&Signature={cloudFrontSignature}&Policy={cloudFrontPolicy}";

System.Diagnostics.Trace.WriteLine(downloadURL);

RestRequest requestDownload = new RestRequest(downloadURL, RestSharp.Method.Get);
System.IO.Stream downloadStream = await restSharpClient.DownloadStreamAsync(requestDownload);
string name = derivativeUrn.Substring(derivativeUrn.LastIndexOf('/') + 1);
using (var memoryStream = new MemoryStream())
{
    downloadStream.CopyTo(memoryStream);
    File.WriteAllBytes(name, memoryStream.ToArray());
}

您可以在此处找到更多说明:https://aps.autodesk.com/blog/download-derivative-files-using-new-signedcookies-api-without-setting-cookies-first-header

© www.soinside.com 2019 - 2024. All rights reserved.