0

ブラウザからアップロードされたファイルを受信するフロントエンドWebサーバーNode+Expressがあります。次に、ファイルデータを取得し、amqp経由でワーカーに送信します。これは、アップロードを受け入れてamqp経由でファイルを送信するための私のコードです。

    adminCommercialRegistration : function (req,res,next) {
    if(!this.checkLogin (req,res)) return;

        fs.readFile(req.files.html.path, function (err,data) {
            if(err)
            {
                res.json('Error reading uploaded file');
            }
            else
            {
                var metaData = {
                                companyName : req.body.companyName,
                                date : req.body.date
                               };
                var payLoad = { metaData : metaData, data : data };
                var connection = require('amqp').createConnection({ host : '172.27.164.28'});
                    connection.on('ready', function(){

                        console.log('Connected to ' + connection.serverProperties.product);

                        var exchange = connection.exchange('ooparoopa');
                        var queue = connection.queue('htmlFileUpload');

                        queue.on('queueDeclareOk', function(args) {
                            console.log('Queue Opened');
                            queue.bind(exchange, '#html');

                            queue.on('queueBindOk',function (){
                            console.log('Queue Bound');

                            exchange.publish('#html', { payLoad : payLoad });
                            res.redirect('/commercial');
                        });
                    });
                });                 
            }
        });
    },

この部分は正常に機能し、データを送信します。こちら側のデータオブジェクトを調べましたが、これはバッファです。

以下のコードはワーカープロセスです。データを受け取り、必要な情報をデータベースに追加します。ただし、ファイルデータに問題があります。バッファのようには見えません。そして、不明なエンコーディングのエラーメッセージが表示されます。これをバイナリバッファに戻すにはどうすればよいですか?

connection.on('ready', function(){
console.log('Connected to ' + connection.serverProperties.product);

var exchange = connection.exchange('ooparoopa');
var queue = connection.queue('htmlFileUpload');

queue.on('queueDeclareOk', function(args){
    queue.bind(exchange, '#html');

    queue.subscribe({ack:true}, function (payLoad) {
        queue.shift();
        console.log('Message Received:');
        console.log(payLoad.payLoad.metaData.companyName);
        var Commercial = db.model('Commercial');
        var newCommercial = new Commercial({ companyName : payLoad.payLoad.metaData.companyName, date : payLoad.payLoad.metaData.date });
        newCommercial.save(function (err,newComm){
            if(err)
            {
                console.log(err);
            }
            else
            {

                console.log(payLoad.payLoad.data.length)
                var folder = '/var/www/ooparoopastatic/html/';
                var _id = newComm.id;
                var filename = _id + '.zip';

                console.log(payLoad.payLoad.data);
                fs.writeFileSync(folder + filename, buffer, function (err) {
                    if(err)
                    {
                        console.log(err);
                    }
                    else
                    {
                        console.log('Writing to file at:' + folder + filename);
                    }
                });
            }
        });
    });
});
})
4

0 に答える 0