Estoy usando la API de administración de datos de Forge para acceder a mis archivos A360 y mi objetivo es traducirlos al formato SVF para poder verlos en mi visor. Hasta ahora, he podido alcanzar el elemento deseado usando ForgeDataManagement.ItemsApi, pero no sé qué hacer con el elemento para cargarlo en el depósito de mi aplicación.

Según la documentación, parece que uploadObject es el camino a seguir (https://github.com/Autodesk-Forge/forge.oss-js/blob/master/docs/ObjectsApi.md#uploadObject), pero no sé exactamente cómo hacer esta función funciona.

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...
     }

¡Espero que alguien pueda ayudarme!

Mis datos actuales:

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

Saludos, Torjuss

0
torjuss 15 dic. 2016 a las 02:06

2 respuestas

La mejor respuesta

Descubrimos cómo hacer que las cosas funcionen después del apoyo de Adam Nagy. En pocas palabras, tuvimos que hacer todo mediante el uso de OAuth de 3 patas, ya que todas las operaciones implican un documento de una cuenta A360. Esto incluye acceder y mostrar la estructura del archivo, traducir un documento a SVF, iniciar el visor y cargar el documento en el visor.

Además, apuntamos a la identificación incorrecta al intentar traducir el documento. Esta publicación muestra lo fácil que es se puede hacer ahora, ¡gracias a Adam por la información!

0
torjuss 29 dic. 2016 a las 20:30

Al utilizar la API de gestión de datos, puede trabajar con

  • OAuth de 2 patas (client_credentials) y acceso a los depósitos y objetos de OSS,
  • o 3 patas (código_autorización) y acceda a los centros, proyectos, carpetas, elementos y revisiones de un usuario

Cuando usa 3 patas, accede al contenido de alguien en A360 o BIM360 y el sistema traduce automáticamente estos archivos, por lo que no es necesario volver a traducirlos ni transferirlos a un contenedor de aplicaciones de 2 patas. Lo único que debe hacer es obtener el manifiesto del elemento o su revisión y usar la URN para verlo en el visor.

Vea un ejemplo aquí: https://developer.autodesk.com/en/docs/data/v2/reference/http/projects-project_id-versions-version_id-GET/

Verá algo como Ejemplos: recuperación exitosa de una versión específica (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"
          }
        },

Ahora, para responder a la otra pregunta sobre la carga, tengo un ejemplo disponible aquí: https://github.com/ Autodesk-Forge / forge.commandline-nodejs / blob / master / forge-cb.js # L295. Copié el código relevante aquí para que todos vean cómo usarlo:

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) {
        ...
    }) ;
}) ;

Solo recuerde que ossObjects es para 2 patas, mientras que los elementos, las versiones son de 3 patas.

0
cyrille 15 dic. 2016 a las 08:04