在我的节点快速服务器上,我收到一个pdf文件。我使用以下代码从请求中获取pdf内容
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内容,我需要将它原样发送到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服务器之前)是完全没必要的,因为我没有对文件进行任何更改。
一旦我将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'));
})
})
}
答案 0 :(得分: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...
});
}