2012-03-02 5 views
28

J'ai essayé de trouver un exemple de la façon de lire une image jpeg et ensuite montrer l'image.nodejs - Comment lire et sortir une image jpg?

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/'); 

Essayé le code suivant, mais je pense que le codage doit être définie comme objet tampon apparaît lorsque je CONSOLE.LOG les données.

Répondre

48

Voici comment vous pouvez lire l'intégralité du contenu du fichier, et si elle est faite avec succès, 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 le " readFile "fonction de rappel et l'en-tête de réponse a Content-Type: image/jpeg.

[Modifier] Vous pouvez même intégrer l'image dans une page HTML en utilisant directement un <img> avec un data URI source. 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>'); 
+2

Existe-t-il un moyen de le faire alors disons que nous lisons les données jpeg et que nous mettons dans l'attribut src peut-être en l'encodant en base64? – mesh

+2

Génial! Juste la solution dont j'avais besoin. Merci pour ce deuxième exemple. – mesh

+0

qu'en est-il si nous avons plusieurs images? –

-1

Deux choses à garder à l'esprit Content-Type et le codage

1.Quels si le fichier est css

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

res.write (données, 'utf8');

} 2 si le fichier est jpg/png

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

res.end (données, 'Base64'); Au-dessus de l'un est juste un exemple de code pour expliquer la réponse et non le modèle de code exact.

Questions connexes