1

プロジェクト用にオートデスク 3D ビューア システムを作成しています。

3D モデル ファイル(*.rvt 拡張子)を meteor サーバーにアップロードし、Autodesk View and Data API を使用して変換しようとしています。

meteor-uploadsを使用してファイルをシステムにアップロードしています。このアップロードが完了すると、コールバック関数によって Meteor メソッド呼び出しがトリガーされ、このファイルが Autodesk API にアップロードされ、変換されます。

meteor アップロードのクライアント コード:

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);
                });
            }
        }
    }
});

アップロードが開始される前であっても、コンソール ログには undefined が出力されます。以下はサーバーコードです

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);
})

問題は、メソッドが未定義の値ですぐに戻り、最後のコールバック「挿入」のものを除いて、async.waterfall 内のすべてのコンソール ログが正しい順序で出力されることです。これは、 Document.insert 関数が呼び出されたり起動されたりせず、エラーも発生しないためです。

Futures ライブラリを試してみましたが、役に立ちませんでした。挿入関数を別のメソッド内に入れてみましたが、まだ使用できません。

どんなアイデアでも本当に役に立ちます。必要に応じて、さらに情報を提供させていただきます。

4

1 に答える 1

1

何が問題なのかを推測するのは難しく、私は Meteor に精通していません。https://github.com/Developer-Autodesk/view-and-data-npmで npm パッケージを試しましたか?

最新バージョンは、最近変更された現在の API に対応していないため、バージョン 1.0.7 をインストールしてください。

それを使用してファイルをアップロードして翻訳するのは非常に簡単です。例は readme とテストで利用できます

于 2016-07-01T15:23:23.600 に答える