我一直在为项目创建一个autodesk 3D查看器系统。
我正在尝试将3D模型文件(* .rvt扩展名)上传到我的meteor服务器,然后使用Autodesk View和Data API进行翻译。
我正在使用meteor-uploads将文件上传到系统。完成上传后,回调函数会触发Meteor Method调用,将此文件上传到Autodesk API并对其进行转换。
流星上传的客户端代码:
Template.uploader.helpers({
afterUpload: function(){
return {
finished:function(index,fileinfo,content){
console.log(fileinfo);
Meteor.call('translateFile', fileinfo.name, function(err,result){
console.log(result);
});
}
}
}
});
即使在上传开始之前,控制台日志也会打印未定义。 以下是服务器代码
translateFile:function(name){
var filename =process.env.PWD + '/.data/' + name ;
var bucket =
'model'
+ new Date ().toISOString ().replace (/T/, '-').replace (/:+/g, '-').replace (/\..+/, '')
+ '-' + lmv.Lmv.getToken ().toLowerCase ().replace (/\W+/g, '') ;
var policy ='persistent' ;
console.log(bucket);
async.waterfall ([
function (callbacks1) {
console.log ('createBucketIfNotExist') ;
new lmv.Lmv(bucket).createBucketIfNotExist (policy)
.on ('success', function (data) {
console.log ('Bucket already or now exist!') ;
callbacks1 (null, data) ;
})
.on ('fail', function (err) {
console.log ('Failed to create bucket!') ;
callbacks1 (err) ;
})
;
},
function (arg1, callbacks2) {
console.log ('async upload') ;
new lmv.Lmv(bucket).uploadFile (filename)
.on ('success', function (data) {
console.log (filename + ' uploaded.') ;
callbacks2 (null, data) ;
})
.on ('fail', function (err) {
console.log ('Failed to upload ' + filename + '!') ;
callbacks2 (err) ;
})
;
},
function (arg1, callbacks3) {
console.log ('Launching translation') ;
var urn =JSON.parse (arg1).objects [0].id ;
new lmv.Lmv (bucket).register (urn)
.on ('success', function (data) {
console.log ('Translation requested.') ;
callbacks3 (null, data) ;
})
.on ('fail', function (err) {
console.log ('Failed to request translation!') ;
callbacks3 (err) ;
})
;
}
], function (err, results) {
console.log(results.urn);
console.log(results);
console.log(err);
if (err){
console.log(err);
return err;
}
if(results){
Document.insert({urn:results.urn,name:name});
console.log('inserting');
}
}) ;
console.log('---------------------HERE AT THE END---------------------')
},
,客户端代码为:
Meteor.call('translateFile', name, function(err,result){
console.log(result);
})
问题是,方法立即返回值undefined,并且async.waterfall中的所有控制台日志都以正确的顺序打印,除了上一个回调“插入”中的那个。这是因为Document.insert函数没有被调用/触发,我甚至没有收到错误。
我试过Futures库没用。我甚至尝试将insert函数放在另一个方法中,仍然没有用。
任何想法都会非常有用。如有必要,我很乐意提供更多信息。
答案 0 :(得分:1)
很难猜出出了什么问题,而且我对Meteor并不熟悉,我觉得在这种情况下并不重要。您是否在https://github.com/Developer-Autodesk/view-and-data-npm尝试了npm包?
安装版本1.0.7,因为最新版本与最近修改过的当前API不同步。
使用它上传和翻译文件非常简单,自述文件和测试中提供了一个示例