Чтение png изображения из запроса с использованием body-parser и Express - PullRequest
0 голосов
/ 21 ноября 2018

Я отправляю на сервер следующий запрос с помощью почтальона:

enter image description here

Я пытаюсь получить доступ к изображению в своем приложении, используя следующий код:

app.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;

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;

Сначала я использовалФорма (с помощью библиотеки express-fileupload) для отправки изображения, и это работало нормально, поэтому я знаю, что проблема должна быть где-то перед строкой var image = req.body.Для работы функций Jimp (библиотеки обработки изображений) изображение должно быть буфером, представляющим изображение png.При запуске console.log(image) консоль выводит {}.

Может кто-нибудь показать мне способ чтения png как буфера, когда он отправляется в виде двоичного файла?

Ответы [ 2 ]

0 голосов
/ 21 ноября 2018

вы можете переписать функцию с lib multer?

const multer  = require('multer')
const storage = multer.memoryStorage()
const upload = multer({ storage: storage })

router.post('/a', upload.single('image'), function(req, res, next) {    
  const image = req.file.buffer    
});

или с грозным?

var formidable = require('formidable' );

router.post('/a', (req, res) => {
  const form = new formidable.IncomingForm();
  form.parse(req, (error, fields, files) => {
    const image = files.image;
  })
});
0 голосов
/ 21 ноября 2018

Не важно, мне просто пришлось изменить заголовок Content-Type в моем запросе на image / png -.-

...