Не удается отправить PNG по маршруту express - PullRequest
0 голосов
/ 02 мая 2020

У меня есть изображение png, которое я передаю с моей конечной точки express, изображение должно быть читаемым как источник изображения. В настоящее время у меня есть изображение в виде буфера в узле, и я пытаюсь его визуализировать, однако не могу отобразить изображение.

Результат

Outcome of code

Ожидается

enter image description here

Express JS Код

publicController.get('/avatar', async (req, res, next) => {
  const image = await PUBLIC.avatar();
  res.writeHead(200, {
      'Content-Type': 'image/png',
      'Content-Length': image.toString("binary").length
    });
  res.charset = 'binary';
  res.write(image.toString("binary"));
  res.end()
})

Пробные методы:

  • Трубопровод из читаемого потока
  • Преобразование в основание 64 и рендеринг
  • Преобразование в двоичный файл и конвейер
  • Преобразование в двоичный файл и рендеринг
  • Дамп необработанного файла png

Соображения:

  • Я проверил, и файл PNG правильный, я создал файл из буфера, и PNG рендерит отлично.
  • Изображение png является динамическим c в зависимости от нескольких факторов, поэтому я не может поместить в хранилище объектов, как s3.

Ответы [ 2 ]

1 голос
/ 06 мая 2020
res.write(image.toString("binary"));

Это не подходит. Если у вас уже есть буфер, не конвертируйте его. Запишите это немедленно.

res.writeHead(200, {
  'Content-Type': 'image/png',
  'Content-Length': image.length;
});
res.end(image);
0 голосов
/ 06 мая 2020

Вы пробовали это?

// assuming image is a Buffer
  res.writeHead(200, {
      'Content-Type': 'image/png' // drop Content-Length as it should be automatically added by express
    });
  res.end(image);
...