Подтвердить что ты не робот

Node Экспресс отправки файлов изображений в качестве ответа API

Я искал это, но не смог найти ответ, но это должна быть общая проблема. Это тот же вопрос, что и Node request (read image stream - pipe back to response), который не отвечает.

Как отправить файл изображения как ответ Express.send()? Мне нужно сопоставить URL-адреса RESTful с изображениями, но как отправить двоичный файл с правильными заголовками? Например.

<img src='/report/378334e22/e33423222' />

Вызовы...

app.get('/report/:chart_id/:user_id', function (req, res) {
     //authenticate user_id, get chart_id obfuscated url
     //send image binary with correct headers
});
4b9b3361

Ответ 2

правильное решение с потоком и обработкой ошибок ниже: const fs = require ('fs')

const stream = require('stream')

app.get('/report/:chart_id/:user_id',(req, res) => {
  const r = fs.createReadStream('path to file') // or any other way to get a readable stream
  const ps = new stream.PassThrough() // <---- this makes a trick with stream error handling
  stream.pipeline(
   r,
   ps, // <---- this makes a trick with stream error handling
   (err) => {
    if (err) {
      console.log(err) // No such file or any other kind of error
      return res.sendStatus(400); 
    }
  })
  ps.pipe(res) // <---- this makes a trick with stream error handling
})

с Node старше 10 вам нужно будет использовать насос вместо конвейера.