Загрузка файлов в BIM 360 на C#
Загрузка файлов с помощью Data Management API требует несколько предварительных шагов, описанных здесь:
1) определить, куда загружать файлы (хаб, проект, папка)
2) в проекте создать новое место хранилища
3) загрузить файл в это хранилище
4) создать версию (первую или новую)
Этот процесс может быть реализован на любом языке программирования. Здесь мы опишем, как это сделать на C#
1. Хабы, проекты и папки
Определить хаб/проект/папку можно перемещаясь по их иерархии, как описано здесь.
2) Определить место хранилища
Здесь нам нужен действующий токен, полученный с помощью 3-факторной авторизации, определенный в переменной userAccessToken. Также нам требуются projectId и itemId. В коде ниже показано получение uploadUrl, который мы сможем использовать для того, чтобы положить файл по данному адресу:
- ItemsApi itemApi = new ItemsApi();
- itemApi.Configuration.AccessToken = userAccessToken;
- dynamic item = await itemApi.GetItemAsync(projectId, itemId);
- string folderId = item.data.relationships.parent.data.id;
- string fileName = item.data.attributes.displayName;
- // подготовка хранилища
- ProjectsApi projectApi = new ProjectsApi();
- projectApi.Configuration.AccessToken = userAccessToken;
- StorageRelationshipsTargetData storageRelData = new StorageRelationshipsTargetData(StorageRelationshipsTargetData.TypeEnum.Folders, folderId);
- CreateStorageDataRelationshipsTarget storageTarget = new CreateStorageDataRelationshipsTarget(storageRelData);
- CreateStorageDataRelationships storageRel = new CreateStorageDataRelationships(storageTarget);
- BaseAttributesExtensionObject attributes = new BaseAttributesExtensionObject(string.Empty, string.Empty, new JsonApiLink(string.Empty), null);
- CreateStorageDataAttributes storageAtt = new CreateStorageDataAttributes(fileName, attributes);
- CreateStorageData storageData = new CreateStorageData(CreateStorageData.TypeEnum.Objects, storageAtt, storageRel);
- CreateStorage storage = new CreateStorage(new JsonApiVersionJsonapi(JsonApiVersionJsonapi.VersionEnum._0), storageData);
- dynamic storageCreated = await projectApi.PostStorageAsync(projectId, storage);
- string[] storageIdParams = ((string)storageCreated.data.id).Split('/');
- string[] bucketKeyParams = storageIdParams[storageIdParams.Length - 2].Split(':');
- string bucketKey = bucketKeyParams[bucketKeyParams.Length - 1];
- string objectName = storageIdParams[storageIdParams.Length - 1];
- string uploadUrl = string.Format("https://developer.api.autodesk.com/oss/v2/buckets/{0}/objects/{1}", bucketKey, objectName);
3) Загрузка файла
Загрузка осуществляется с помощью PUT-запроса - единого, либо с помощью загрузки по частям, как описано здесь.
4) Создание версии
После загрузки файла нужно создать версию. Код ниже использует storageId (шаг 2), itemId и имя файла fileName.
- VersionsApi versionsApis = new VersionsApi();
- versionsApis.Configuration.AccessToken = credentials.TokenInternal;
- CreateVersion newVersionData = new CreateVersion
- (
- new JsonApiVersionJsonapi(JsonApiVersionJsonapi.VersionEnum._0),
- new CreateVersionData
- (
- CreateVersionData.TypeEnum.Versions,
- new CreateStorageDataAttributes
- (
- fileName,
- new BaseAttributesExtensionObject
- (
- "versions:autodesk.bim360:File",
- "1.0",
- new JsonApiLink(string.Empty),
- null
- )
- ),
- new CreateVersionDataRelationships
- (
- new CreateVersionDataRelationshipsItem
- (
- new CreateVersionDataRelationshipsItemData
- (
- CreateVersionDataRelationshipsItemData.TypeEnum.Items,
- itemId
- )
- ),
- new CreateItemRelationshipsStorage
- (
- new CreateItemRelationshipsStorageData
- (
- CreateItemRelationshipsStorageData.TypeEnum.Objects,
- storageId
- )
- )
- )
- )
- );
- dynamic newVersion = await versionsApis.PostVersionAsync(projectId, newVersionData);
Источник: https://forge.autodesk.com/blog/upload-files-bim-360-c
Обсуждение: http://adn-cis.org/forum/index.php?topic=
Опубликовано 30.11.2018Отредактировано 30.11.2018 в 20:52:00