web-dev-qa-db-fra.com

nodejs - Comment lire et sortir une image jpg?

J'ai essayé de trouver un exemple de lecture d'une image jpeg, puis d'afficher l'image.

var http = require('http'), fs = require('fs');

http.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/html'});

fs.readFile('image.jpg', function (err, data) {
  if (err) throw err;
  res.write(data);
});

res.end();
}).listen(8124, "127.0.0.1");
console.log('Server running at http://127.0.0.1:8124/');

J'ai essayé le code suivant mais je pense que l'encodage doit être défini comme tampon. À l'aide de console.log, il génère un "objet" pour les données.

36
mesh

Voici comment vous pouvez lire l'intégralité du contenu du fichier et, si l'opération est réussie, démarrez un serveur Web qui affiche l'image JPG en réponse à chaque demande:

var http = require('http')
  , fs = require('fs');

fs.readFile('image.jpg', function(err, data) {
  if (err) throw err; // Fail if the file can't be read.
  http.createServer(function(req, res) {
    res.writeHead(200, {'Content-Type': 'image/jpeg'});
    res.end(data); // Send the file data to the browser.
  }).listen(8124);
  console.log('Server running at http://localhost:8124/');
});

Notez que le serveur est lancé par la fonction de rappel "readFile" et l'en-tête de réponse a Content-Type: image/jpeg.

[Modifier] Vous pouvez même incorporer l'image dans une page HTML directement en utilisant un <img> avec un source d'URI de données . Par exemple:

  res.writeHead(200, {'Content-Type': 'text/html'});
  res.write('<html><body><img src="data:image/jpeg;base64,')
  res.write(Buffer.from(data).toString('base64'));
  res.end('"/></body></html>');
65
maerics

Deux choses à garder à l'esprit Content-Type et Encoding

1) Que faire si le fichier est css

if (/.(css)$/.test(path)) {
  res.writeHead(200, {'Content-Type': 'text/css'}); 
  res.write(data, 'utf8');
} 

2) Que faire si le fichier est au format jpg/png

if (/.(jpg)$/.test(path)) {
  res.writeHead(200, {'Content-Type': 'image/jpg'});
  res.end(data,'Base64');
}

Ci-dessus, un exemple de code pour expliquer la réponse et non le modèle de code exact.

0
user2248133