通过http发送jpg的问题 - node.js

时间:2011-12-09 11:44:36

标签: http node.js jpeg fs

我正在尝试编写一个简单的http网络服务器,(在其他功能中),可以向客户端发送请求的文件。
发送常规文本文件/ html文件可用作魅力。问题在于发送图像文件 这是我的代码的一部分(在解析MIME TYPE之后,包括fs node.js模块):

if (MIMEtype == "image") {    
    console.log('IMAGE');  
    fs.readFile(path, "binary", function(err,data) {  
        console.log("Sending to user: ");  
        console.log('read the file!');  
        response.body = data;  
        response.end();  
    });  
} else {
    fs.readFile(path, "utf8", function(err,data) {
        response.body = data ;
        response.end() ;
    });
}    

打开http://localhost:<serverPort>/test.jpg后,为什么我所得到的都是空白页?

1 个答案:

答案 0 :(得分:3)

这里有一个关于如何以最简单的方式使用Node.js发送图像的完整示例(我的示例是gif文件,但它可以与其他文件/图像类型一起使用):

var http = require('http'),
    fs = require('fs'),
    util = require('util'),
    file_path = __dirname + '/web.gif'; 
    // the file is in the same folder with our app

// create server on port 4000
http.createServer(function(request, response) {
  fs.stat(file_path, function(error, stat) {
    var rs;
    // We specify the content-type and the content-length headers
    // important!
    response.writeHead(200, {
      'Content-Type' : 'image/gif',
      'Content-Length' : stat.size
    });
    rs = fs.createReadStream(file_path);
    // pump the file to the response
    util.pump(rs, response, function(err) {
      if(err) {
        throw err;
      }
    });
  });
}).listen(4000);
console.log('Listening on port 4000.');

<强>更新

util.pump已被弃用了一段时间,您可以使用流来完成此操作:

fs.createReadStream(filePath).pipe(req);