ブラウザからアップロードされたファイルを受信するフロントエンド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);
}
});
}
});
});
});
})