2016-09-20 89 views
0

在我的节点express服务器上,我收到了一个pdf文件。我使用下面的代码从请求从节点上传文件到servlet而不保存它

var data = new Buffer(''); 
request.on('data', function (chunk) { 
    data = Buffer.concat([data, chunk]); 
}); 

request.on('end', function() { 
    console.log('PDF data is '+JSON.stringify(data)); 
}); 

现在,PDF内容可以在节点获取PDF内容,我需要把它,因为它是一个J2EE服务器。为了做到这一点,我先保存在节点服务器的PDF文件,从节点服务器读取它,然后管道它的request.POST(https://github.com/request/request

var req = require('request'); 

fs.writeFile('abc.pdf', data, 'binary', function(err) { 
    if (err) { 
     console.log('Error ' + JSON.stringify(err)); 
     throw err; 
    } 
    var source = fs.createReadStream('abc.pdf'); 
    //send our data via POST request 
    source.pipe(req.post('http://'+j2ee_host+':'+j2ee_port+'/myjavaapp/Upload') 
}); 

这工作得很好。不过,我觉得将PDF文件保存在节点服务器上然后读取它(在使用请求模块发布到J2EE服务器之前)是完全不必要的,因为我没有对文件进行任何更改。

一旦我在'data'变量中有PDF内容,我想直接将它们发布到J2EE服务器。但是,我一直无法找到使用请求模块直接发布文件内容的方法。我已经看到一些与POST使用请求模块相关的示例,但它们引用了formData。在我的情况下,我没有formData,而是从请求中读取文件并直接将其发布到J2EE服务器。

有没有办法实现这一点,并避免文件的写入和读取?

编辑

下面是我完整的代码

function upload(request, response) { 
    var data = new Buffer(''); 
    request.on('data', function (chunk) { 
     data = Buffer.concat([data, chunk]); 
    }); 

    request.on('end', function() { 
      fs.writeFile('abc.pdf', data, 'binary', function(err){ 
      if (err) { 
       console.log('Error ' + JSON.stringify(err)); 
       throw err; 
      } 
      var source = fs.createReadStream('abc.pdf');      
      source.pipe(req.post('http://'+j2ee_host+':'+j2ee_port+'/myj2eeapp/Upload'));     
      }) 
    }) 
} 

回答

1

可以从数据请求到Servlet管直接

var req = require('request'); 
function upload(request, response) { 
    var target = req.post('http://'+j2ee_host+':'+j2ee_port+'/myjavaapp/Upload'); 
    request.pipe(target); 
    target.on('finish', function() { 
     console.log('All done!'); 
     //send the response or make a completed callback here... 
    }); 
    } 
+0

代码添加到问题 – kayasa