2016-12-14 9 views
0

Я использую API управления данными Forge для доступа к моим файлам A360 и преследую цель перевести их в формат SVF, чтобы я мог просматривать их в своем средстве просмотра. До сих пор мне удалось достичь желаемого элемента, используя ForgeDataManagement.ItemsApi, но я не знаю, что делать с элементом, чтобы загрузить его в ведро в моем приложении.Загрузка файла с Autodesk A360 в bucket в NodeJS

Из документации кажется, что uploadObject - это путь (https://github.com/Autodesk-Forge/forge.oss-js/blob/master/docs/ObjectsApi.md#uploadObject), но я точно не знаю, как заставить эту функцию работать.

var dmClient = ForgeDataManagement.ApiClient.instance; 
var dmOAuth = dmClient.authentications ['oauth2_access_code']; 
dmOAuth.accessToken = tokenSession.getTokenInternal(); 
var itemsApi = new ForgeDataManagement.ItemsApi(); 

fileLocation = decodeURIComponent(fileLocation); 
var params = fileLocation.split('/'); 
var projectId = params[params.length - 3]; 
var resourceId = params[params.length - 1]; 

itemsApi.getItemVersions(projectId, resourceId) 
.then (function(itemVersions) { 
    if (itemVersions == null || itemVersions.data.length == 0) return; 

    // Use the latest version of the item (file). 
    var item = itemVersions.data[0]; 

    var contentLength = item.attributes.storageSize;     
    var body = new ForgeOSS.InputStream(); 
    // var body = item; // Using the item directly does not seem to work. 
    // var stream = fs.createReadStream(...) // Should I create a stream object lik suggested in the documention? 

    objectsAPI.uploadObject(ossBucketKey, ossObjectName, contentLength, body, {}, function(err, data, response) { 
    if (err) { 
     console.error(err); 
    } else { 
     console.log('API called successfully. Returned data: ' + data); 

     //To be continued... 
    } 

Надеюсь, кто-то может мне помочь!

Мои текущие данные:

ossObjectName = "https://developer.api.autodesk.com/data/v1/projects/"myProject"/items/urn:"myFile".dwfx"; 
ossBucketKey = "some random string based on my username and id"; 

С уважением, torjuss

ответ

0

При использовании управление данными API, вы можете работать с

  • 2 протокола OAuth (client_credentials) и доступа к ОСС» ведра и предметы,
  • или 3 legged (authorization_code) и доступ к пользовательским концентраторам, проектам, папкам , Товары и Ревизии

При использовании 3 ножек, вы делаете доступ чей контента на A360 или BIM360 и эти файлы автоматически преобразуются системой, так что вам не нужно переводить их снова, не передавать их на ведро с двумя ногами. Единственное, что вам нужно сделать, это получить манифест предмета или его ревизию и использовать URN, чтобы увидеть его в средстве просмотра.

Checkout пример здесь: https://developer.autodesk.com/en/docs/data/v2/reference/http/projects-project_id-versions-version_id-GET/

вы увидите что-то вроде примеров: Успешный Retrieval конкретной версии (200)

curl -X GET -H "Authorization: Bearer kEnG562yz5bhE9igXf2YTcZ2bu0z" "https://developer.api.autodesk.com/data/v1/projects/a.45637/items/urn%3Aadsk.wipprod%3Adm.lineage%3AhC6k4hndRWaeIVhIjvHu8w" 
{ 
    "data": { 
    "relationships": { 
     "derivatives": { 
     "meta": { 
      "link": { 
      "href": "/modelderivative/v2/designdata/dXJuOmFkc2sud2lwcWE6ZnMuZmlsZTp2Zi50X3hodWwwYVFkbWhhN2FBaVBuXzlnP3ZlcnNpb249MQ/manifest" 
      } 
     }, 

Теперь, чтобы ответить на другой вопрос дэ о загрузке, я приведен пример: https://github.com/Autodesk-Forge/forge.commandline-nodejs/blob/master/forge-cb.js#L295. Я скопировал соответствующий код здесь для всех, чтобы увидеть, как использовать его:

fs.stat (file, function (err, stats) { 
    var size =stats.size ; 
    var readStream =fs.createReadStream (file) ; 
    ossObjects.uploadObject (bucketKey, fileKey, size, readStream, {}, function (error, data, response) { 
     ... 
    }) ; 
}) ; 

Просто помните, что ossObjects для 2 ножек, где в качестве предметов, версия 3 ноги.

+0

Благодарим вас за ответ, cyrille! Имеет смысл использовать файлы A360 напрямую, не переходя в ведро приложения. Однако; когда я теперь пытаюсь запустить свой просмотрщик и загрузить документ, я получаю несанкционированный статус 401, независимо от того, использую ли я 2 или 3-хточечную проверку подлинности (не совсем уверен, какой из них использовать). Я использую следующий метод: Autodesk.Viewing.Document.load (documentId, oauth3legtoken, function (doc) {...}); И получить следующий статус HTTP: https://developer.api.autodesk.com/oss-ext/v1/acmsessions 401 (неавторизованный) – torjuss

+0

Я нашел следующее сообщение, похоже, что оно связано с этой проблемой. Знаете ли вы, было ли это исправлено, или мне нужно использовать альтернативный подход, который предлагает Филипп Лифсма? http://stackoverflow.com/questions/37835178/creating-a-viewer-application-with-an-urn-from-autodesk-a360/38328133#38328133 – torjuss

0

Мы выяснили, как заставить работу работать после некоторой поддержки Адама Надя. Проще говоря, мы должны были сделать все, используя 3-х сторонний OAuth, поскольку все операции включают документ из учетной записи A360. Это включает в себя доступ и отображение структуры файла, перевод документа в SVF, запуск средства просмотра и загрузку документа в программу просмотра.

Кроме того, при попытке перевода документа мы использовали неверный идентификатор. This post показывает, как легко это можно сделать сейчас, благодаря Адаму за информацию!