86 votes

Node Express envoie des fichiers images en réponse à l'API

J'ai cherché sur Google mais je n'ai pas trouvé de réponse, mais il doit s'agir d'un problème courant. Il s'agit de la même question que Demande du nœud (lecture du flux d'images - renvoi à la réponse) qui reste sans réponse.

Comment envoyer un fichier image en tant que réponse Express .send() ? J'ai besoin de faire correspondre des urls RESTful à des images - mais comment envoyer le fichier binaire avec les bons en-têtes ? Par exemple,

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

Appels...

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

119voto

Po-Ying Chen Points 1490

Il existe une interface utilisateur dans Express.

res.sendFile

app.get('/report/:chart_id/:user_id', function (req, res) {
    // res.sendFile(filepath);
});

http://expressjs.com/en/api.html#res.sendFile

17voto

kharandziuk Points 986

Une solution correcte avec des flux et une gestion des erreurs est présentée ci-dessous :

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
})

avec Node plus ancien que 10, vous devrez utiliser pompe au lieu d'un pipeline.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X