ADN Open CIS
Сообщество программистов Autodesk в СНГ

30/11/2018

Загрузка файлов в BIM 360 на C#

Загрузка файлов с помощью Data Management API требует несколько предварительных шагов, описанных здесь:

1) определить, куда загружать файлы (хаб, проект, папка)

2) в проекте создать новое место хранилища

3) загрузить файл в это хранилище

4) создать версию (первую или новую)

Этот процесс может быть реализован на любом языке программирования. Здесь мы опишем, как это сделать на C#

1. Хабы, проекты и папки

Определить хаб/проект/папку можно перемещаясь по их иерархии, как описано здесь.

2) Определить место хранилища

Здесь нам нужен действующий токен, полученный с помощью 3-факторной авторизации, определенный в переменной userAccessToken. Также нам требуются projectId и itemId. В коде ниже показано получение uploadUrl, который мы сможем использовать для того, чтобы положить файл по данному адресу:

Код - C#: [Выделить]
  1.  
  2. ItemsApi itemApi = new ItemsApi();
  3. itemApi.Configuration.AccessToken = userAccessToken;
  4. dynamic item = await itemApi.GetItemAsync(projectId, itemId);
  5. string folderId = item.data.relationships.parent.data.id;
  6. string fileName = item.data.attributes.displayName;
  7. // подготовка хранилища
  8. ProjectsApi projectApi = new ProjectsApi();
  9. projectApi.Configuration.AccessToken = userAccessToken;
  10. StorageRelationshipsTargetData storageRelData = new StorageRelationshipsTargetData(StorageRelationshipsTargetData.TypeEnum.Folders, folderId);
  11. CreateStorageDataRelationshipsTarget storageTarget = new CreateStorageDataRelationshipsTarget(storageRelData);
  12. CreateStorageDataRelationships storageRel = new CreateStorageDataRelationships(storageTarget);
  13. BaseAttributesExtensionObject attributes = new BaseAttributesExtensionObject(string.Empty, string.Empty, new JsonApiLink(string.Empty), null);
  14. CreateStorageDataAttributes storageAtt = new CreateStorageDataAttributes(fileName, attributes);
  15. CreateStorageData storageData = new CreateStorageData(CreateStorageData.TypeEnum.Objects, storageAtt, storageRel);
  16. CreateStorage storage = new CreateStorage(new JsonApiVersionJsonapi(JsonApiVersionJsonapi.VersionEnum._0), storageData);
  17. dynamic storageCreated = await projectApi.PostStorageAsync(projectId, storage);
  18.  
  19. string[] storageIdParams = ((string)storageCreated.data.id).Split('/');
  20. string[] bucketKeyParams = storageIdParams[storageIdParams.Length - 2].Split(':');
  21. string bucketKey = bucketKeyParams[bucketKeyParams.Length - 1];
  22. string objectName = storageIdParams[storageIdParams.Length - 1];
  23.  
  24. string uploadUrl = string.Format("https://developer.api.autodesk.com/oss/v2/buckets/{0}/objects/{1}", bucketKey, objectName);

3) Загрузка файла

Загрузка осуществляется с помощью PUT-запроса - единого, либо с помощью загрузки по частям, как описано здесь.

4) Создание версии

После загрузки файла нужно создать версию. Код ниже использует storageId (шаг 2), itemId и имя файла fileName.

Код - C#: [Выделить]
  1.  
  2. VersionsApi versionsApis = new VersionsApi();
  3. versionsApis.Configuration.AccessToken = credentials.TokenInternal;
  4. CreateVersion newVersionData = new CreateVersion
  5. (
  6.     new JsonApiVersionJsonapi(JsonApiVersionJsonapi.VersionEnum._0),
  7.     new CreateVersionData
  8.     (
  9.         CreateVersionData.TypeEnum.Versions,
  10.         new CreateStorageDataAttributes
  11.         (
  12.         fileName,
  13.         new BaseAttributesExtensionObject
  14.         (
  15.             "versions:autodesk.bim360:File",
  16.             "1.0",
  17.             new JsonApiLink(string.Empty),
  18.             null
  19.         )
  20.         ),
  21.         new CreateVersionDataRelationships
  22.         (
  23.         new CreateVersionDataRelationshipsItem
  24.         (
  25.             new CreateVersionDataRelationshipsItemData
  26.             (
  27.             CreateVersionDataRelationshipsItemData.TypeEnum.Items,
  28.             itemId
  29.             )
  30.         ),
  31.         new CreateItemRelationshipsStorage
  32.         (
  33.             new CreateItemRelationshipsStorageData
  34.             (
  35.             CreateItemRelationshipsStorageData.TypeEnum.Objects,
  36.             storageId
  37.             )
  38.         )
  39.         )
  40.     )
  41. );
  42. 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