繁体   English   中英

将文件从节点上传到servlet而不保存

[英]Upload file to servlet from node without saving it

在我的节点快递服务器上,我收到一个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'));                
           })
    })  
}

您可以直接将数据请求中的管道传递给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...
    });
  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM