3

我想允许用户使用表单将图像文件上传(POST)到我的 Express.js Web 应用程序。收到后,我的 Web 应用程序会将其发布到 GetChute API(一种图像 Web 服务)。

我不希望我的服务器暂时将图像写入磁盘 - 相反,它应该将图像存储到变量中,并将其发送到 GetChute。

默认情况下,我认为 2 个 Express 中间件项(Connect 和 Formidable)提供了一种从 POST 自动执行磁盘写入的好方法,但我将如何绕过它们直接访问字节流,从而避免磁盘写入?

我怀疑比我更聪明的人可以提出比最近针对类似问题提出的更简洁的解决方案:

通过gm使用Express.js上传的流文件消除双重写入

谢谢!

4

1 回答 1

0

您可以直接将请求流式传输到 GetChute 吗?

app.post('/upload', function(req, res) {
  var chuteReq = http.request({
    host: 'api.getchute.com',
    path: '/x/y/z',
    method: 'POST'
  }, function(chuteRes) {
    var chuteBody = '';

    chuteRes.on('data', function(chunk) {
      chuteBody += chunk;
    });

    chuteRes.on('end', function() {
      var chuteJSON = JSON.parse(chuteBody);

      // check the result and build an appropriate response.
      res.end(chuteJSON);
    });
  });

  // pipe the image data directly to GetChute
  req.pipe(chuteReq);      
});

当然,您可以将请求调整为 GetChute。小心,您可能必须解码multipart/form-data

于 2012-08-06T22:49:54.513 回答