将文件从 Autodesk A360 上传到 NodeJS 中的存储桶
Uploading a file from Autodesk A360 to bucket in NodeJS
我正在使用 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";
此致,
托鲁斯
使用 DataManagement API 时,您可以使用
- 2 条腿的 oAuth (client_credentials) 并访问 OSS 的存储桶和对象,
- 或 3 条腿 (authorization_code) 并访问用户的中心、项目、文件夹、项目和修订
当使用 3 条腿时,您确实在 A360 或 BIM360 上访问了某人的内容,并且这些文件由系统自动翻译,因此您不需要再次翻译它们,而不是将它们传输到 2 条腿的应用程序桶上.您唯一需要做的就是获取项目或其修订版的清单,并使用 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、启动查看器并将文档加载到查看器中。
此外,我们在尝试翻译文档时定位了错误的 ID。 This post 显示现在可以轻松完成,感谢 Adam 提供的信息!
我正在使用 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";
此致, 托鲁斯
使用 DataManagement API 时,您可以使用
- 2 条腿的 oAuth (client_credentials) 并访问 OSS 的存储桶和对象,
- 或 3 条腿 (authorization_code) 并访问用户的中心、项目、文件夹、项目和修订
当使用 3 条腿时,您确实在 A360 或 BIM360 上访问了某人的内容,并且这些文件由系统自动翻译,因此您不需要再次翻译它们,而不是将它们传输到 2 条腿的应用程序桶上.您唯一需要做的就是获取项目或其修订版的清单,并使用 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、启动查看器并将文档加载到查看器中。
此外,我们在尝试翻译文档时定位了错误的 ID。 This post 显示现在可以轻松完成,感谢 Adam 提供的信息!