【问题标题】:How to handle binary post data in Express?如何在 Express 中处理二进制发布数据?
【发布时间】:2018-01-22 01:36:02
【问题描述】:

我想以二进制形式将图像发布到我的 Express 应用程序中。

我假设它应该在 req.body 对象中通过,但需要某种形式的中间件来处理二进制数据?

当我从邮递员发送二进制图像并尝试记录 req.body 时,对象为空。

我正在使用 express-generator 作为带有 body-parser 的锅炉板,如下所示:

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));

我查看了 Multer,但认为这仅适用于多部分数据

还查看了 busboy,但不知道它是否可以处理二进制数据。

我是否正确,帖子数据仍将通过 req.body 传递? 我需要什么中间件来处理二进制数据?

谢谢

【问题讨论】:

    标签: node.js image express


    【解决方案1】:

    我最终使用的方法:

    const multer  = require('multer')
    const storage = multer.memoryStorage()
    const upload = multer({ storage: storage })
    
    router.post('/upload', upload.single('image'), function(req, res, next) {
    
      const image = req.file.buffer
    
    });
    

    【讨论】:

      【解决方案2】:

      不幸的是,你不能使用 body-parser 来处理二进制数据,比如文件和类似的东西。但是你可以做的是使用模块调用formidable 来处理这个

      示例截图

      app.post('/', (req, res) => {
        const form = new formidable.IncomingForm();
        form.parse(req, (error, fields, files) => {
          if(error){
            console.log(error)
          }
          
          console.log(fields.name)
          
          const cuteCat = files.cat_image;
          
          console.log(cuteCat.name) // The origin file name
          console.log(cuteCat.path) // The temporary file name something like /tmp/<random string>
          
        })
      });
      <input name="cat_image" type="file" />
      <input name="name" type="text" />

      【讨论】:

      • 这是否意味着我必须完全删除 body-parser?是否意味着其他端点需要有一个自定义方法来解析对 json 的响应?
      • 你不必完全删除 body-parse,因为 body-parse 适合解析原始 JSON 和原始表单数据
      猜你喜欢
      • 1970-01-01
      • 2010-10-01
      • 2011-03-04
      • 2011-08-16
      • 2011-06-24
      • 1970-01-01
      • 1970-01-01
      • 2011-08-18
      • 2017-05-10
      相关资源
      最近更新 更多