【问题标题】:image upload from one server to other in nodejs [duplicate]在nodejs中将图像从一台服务器上传到另一台服务器[重复]
【发布时间】:2018-04-12 14:31:19
【问题描述】:

没有使用 multer 上传文件

我的代码:

从 html 读取文件并传递到外部 url

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':''});
        });
    });

【问题讨论】:

    标签: node.js express multer


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

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

      我会这样做:

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

      使用 Formidable(或 multer 等其他库)处理上传服务器端 (这将允许您分部分读取二进制流,并处理每个部分) app.post('/upload',function(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() 管道传输。

      【讨论】:

        猜你喜欢
        • 2011-11-05
        • 1970-01-01
        • 2023-03-16
        • 2020-06-18
        • 1970-01-01
        • 2017-03-10
        • 1970-01-01
        • 2014-12-11
        • 1970-01-01
        相关资源
        最近更新 更多