2

我正在尝试编写一个简单的 http Web 服务器,它(以及其他功能)可以向客户端发送请求的文件。
发送一个常规的文本文件/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

4

1 回答 1

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);
于 2011-12-09T12:40:28.903 回答