图像从nodejs中的一台服务器上传到另一台服务器

时间:2017-10-31 12:11:40

标签: node.js express multer

没有使用multer上传文件

我的代码:

从html读取文件并传递给外部网址

router.post('/fileUpload',function (req,res) {
   request({
             uri: http//example.com/upload,  // url of other server
             method: "POST",
             form: {
                   "name":req.body.name,
                   "image":? //image from html - no idea how to pass the req.files here
                   }
                    }, function (error, response, body) {
                        ------------
                       ------------
                        }
                });

其他服务器网址:/example.com/upload

这是使用multer上传图片的代码

app.post('/upload',function(req,res){

    var storage =   multer.diskStorage({
    destination: function (req, file, callback) {

      callback(null, 'uploads');
    },
    filename: function (req, file, callback) {
      callback(null, file.fieldname + '-' + Date.now());
    }
});

    var upload = multer({ storage : storage }).array('productImage');
        upload(req,res,function(err) {

            if(err) {
                return res.json({'success':0,'result':{},'errorMessage':'Unknown Error'});
            }
            return res.json({'success':1,'result':{},'errorMessage':''});
        });
    });

2 个答案:

答案 0 :(得分:2)

从上传的文件创建readStream并将其传送到另一台服务器。检查此链接https://www.npmjs.com/package/request,您将轻松完成此操作。

答案 1 :(得分:0)

简单的答案是从上传的文件中创建一个读取流并将其传送到第二个服务器,如下所示:

fs.createReadStream(req.files[0].path).pipe(request.post('http//example.com/upload'))

但是,有很多方法可以完成这项工作。其中最有效的方法是使用从初始上传到第二台服务器的二进制流。您希望避免将第一台服务器用作所有上传的存储空间。

以下是我的做法:

在客户端上传时使用jQuery文件上传 (或上传原始二进制流的任何其他库/方法)     $('#文件上传&#39)。文件上传({         网址:' https://server1.com/upload'     })

使用Formidable(或其他库如multer)来处理上传服务器端 (这将允许您读取部分二进制流,并在它来时处理每个部分)     app.post(' /上传',功能(REQ,RES){         var form = new formidable.IncomingForm();

    form.parse(req);

    form.onPart = function(part) {
        fs.createReadStream(part).pipe( request.post('http//example.com/upload'))
    }
}

当收到二进制上传的每个部分时,您可以通过pipe()直接将二进制文件流式传输到第二个服务器,以避免将其存储在第一台服务器上。

使这项工作的关键是查看文件上传和传输为二进制位流。当用户上传文件(req.body)时,您想要从文件创建读取流,并将二进制文件传输到request.post()上。