将文件从Autodesk A360上传到NodeJS中的存储桶

时间:2016-12-14 23:06:15

标签: node.js autodesk-forge autodesk-model-derivative

我正在使用Forge数据管理API访问我的A360文件,并希望将它们转换为SVF格式,以便我可以在我的查看器中查看它们。到目前为止,我已经能够使用ForgeDataManagement.ItemsApi到达所需的项目,但我不知道如何处理该项目以将其上传到我的应用程序中的存储桶。

从文档中可以看出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

2 个答案:

答案 0 :(得分:0)

使用DataManagement API时,您可以使用

  • 2脚oAuth(client_credentials)并访问OSS的存储桶和对象,
  • 或3条腿(authorization_code)并访问用户的“集线器,项目,文件夹,项目和修订”

使用3条腿时,您可以访问A360或BIM360上的某些内容,系统会自动翻译这些文件,因此您无需再次翻译它们,也不需要将它们传输到2脚应用程序存储桶上。您需要做的唯一事情是获取Item或其修订版的清单,并使用URN在查看器中查看它。

在此处查看示例:https://developer.autodesk.com/en/docs/data/v2/reference/http/projects-project_id-versions-version_id-GET/

你会看到类似的东西 示例:成功检索特定版本(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条腿。

答案 1 :(得分:0)

我们想出了在Adam Nagy的支持下如何让事情发挥作用。简单来说,我们必须通过使用3腿OAuth来完成所有操作,因为所有操作都涉及来自A360帐户的文档。这包括访问和显示文件结构,将文档翻译为SVF,启动查看器以及将文档加载到查看器中。

此外,我们在尝试翻译文档时定位错误的ID。 This post显示现在可以轻松完成,感谢Adam提供的信息!