使用 body-parser 和 Express 从请求中读取 png 图像

Eli*_*ias 6 binary post node.js express body-parser

我使用邮递员向我的服务器发送以下请求:

在此输入图像描述

我尝试使用以下代码访问应用程序中的图像:

应用程序.js

var express = require('express');
var bodyParser = require('body-parser');

var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');

var app = express();

app.use(bodyParser.raw({
  type: 'image/png',
  limit: '10mb'
}));

app.use('/', indexRouter);
app.use('/users', usersRouter);

module.exports = app;
Run Code Online (Sandbox Code Playgroud)

index.js(路由器)

var express = require('express');
const router = express.Router();
var Jimp = require('jimp');

/* GET home page. */
router.get('/', function(req, res) {
  res.render('index', { title: 'Express' });
});

router.post('/a', function(req, res) {
  var image = req.body;

  try{
      Jimp.read(image, (err, input) => {
        if (err) throw err;
        input.sepia();

        input.getBuffer(Jimp.AUTO, (err, output) => {
          if(err) throw err;

          res.writeHead(200, {'Content-Type': 'image/png' });
          return res.end(output, 'binary');
        });
      });
  }catch (err){
      return res.status(400).send(`Error: ${err.message}`).end();
  }
});

module.exports = router;
Run Code Online (Sandbox Code Playgroud)

我首先使用表单(在express-fileupload库的帮助下)发送图像,效果很好,所以我知道问题必须出现在该行之前的某个地方var image = req.body。为了让 Jimp 函数(图像处理库)工作,图像必须是代表 png 图像的缓冲区。运行时console.log(image),控制台输出{}

有人可以告诉我一种在将 png 作为二进制文件发送时将其读取为缓冲区的方法吗?

Eli*_*ias 1

没关系,我只需将请求中的 Content-Type 标头更改为 image/png -.-