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

问题描述:

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

当使用数据管理API,您可以工作,

  • 2模式的OAuth(client_credentials)和访问OSS”桶和对象,
  • 或3 legged(authorization_code)并访问用户的Hubs,Projects,Folders ,项目,并用3条腿的修订

,你做访问A360某人的内容,或BIM360而这些文件由系统自动翻译,所以你不需要他们再翻译,而不是将他们转移在一个双腿的应用桶上。您唯一需要做的就是获取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条腿。

+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

我发现下面的帖子看起来像是与此问题有关。你知道它是否已经修复,还是必须使用Philippe Leefsma建议的替代方法? http://*.com/questions/37835178/creating-a-viewer-application-with-an-urn-from-autodesk-a360/38328133#38328133 – torjuss

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

另外,我们在尝试翻译文档时将错误的目标锁定为目标。 This post显示了现在可以轻松完成,感谢Adam的信息!