将文件从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在查看器中查看它。
,你会看到类似这样的例子 :一个特定的版本(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条腿。
在Adam Nagy的支持下,我们想出了如何让事情顺利进行。简单地说,我们必须使用3段OAuth来完成所有工作,因为所有操作都涉及到来自A360账户的文档。这包括访问和显示文件结构,将文档翻译成SVF,启动查看器并将文档加载到查看器中。
另外,我们在尝试翻译文档时将错误的目标锁定为目标。 This post显示了现在可以轻松完成,感谢Adam的信息!
谢谢你的回答,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
我发现下面的帖子看起来像是与此问题有关。你知道它是否已经修复,还是必须使用Philippe Leefsma建议的替代方法? http://*.com/questions/37835178/creating-a-viewer-application-with-an-urn-from-autodesk-a360/38328133#38328133 – torjuss