【问题标题】:Get file from disk in order to stream it as part of a HTTP response从磁盘获取文件,以便将其作为 HTTP 响应的一部分进行流式传输
【发布时间】:2011-12-18 00:01:42
【问题描述】:

我在 Node.js 之上编写 HTTP 服务器,而不使用 HTTP 模块。

检索 GET 消息:GET /www/index.html HTTP/1.1 应使用位于 /www/index.html 的文件发送响应,与图像和其他文件相同。

谁能指导我使用 javascript 方法从磁盘获取文件并将它们添加到我的 HTTP 响应中?

我的服务器应该能够支持以下内容类型:

  1. JavaScript:应用程序/javascript
  2. HTML:文本/html
  3. CSS:文本/css
  4. JPEG:图像/JPEG
  5. GIF:图片/gif

【问题讨论】:

  • HTTP 服务器应该支持以下内容类型(HTTP 响应头): JavaScript : application/javascript HTML: text/html CSS: text/css JPEG: image/jpeg GIF: image/gif

标签: javascript http node.js


【解决方案1】:

我认为fs module 是您正在寻找的。​​p>

它提供了各种打开和读取文件的功能。一个简单的例子:

fs.readFile('/etc/passwd', function (err, data) {
  if (err) throw err;
  console.log(data);
});

您也可以参考这篇关于使用 Node 读取文件的博文:Different ways to read in files using node.js

【讨论】:

    【解决方案2】:

    类似这样的:

    var fs = require('fs'),
        http = require('http'),
        path = require('path');
    http.createServer(function(req,res){
       path.exists('./' + req.url, function(exists){
         if (!exists){ res.writeHead(404, {'Content-Type': 'text/plain'}); res.end('not found'); }
         else {
           var read_stream = fs.createReadStream('./' + req.url);
           if (read_stream.readable){ res.writeHead(200, {'Content-Type':'text/plain'}); }
           else { res.writeHead(500, {'Content-Type':'text/plain'}); res.end('Error Reading File'); }
           read_stream.on('data', function(data){ res.write(data); });
           read_stream.on('end', function(){ res.end(); fs.close(read_stream); });
         }
       }
    }).listen(3030);
    

    这里的主要技巧是使用文件的可读流。

    【讨论】:

      猜你喜欢
      • 2015-08-27
      • 1970-01-01
      • 1970-01-01
      • 2020-08-07
      • 1970-01-01
      • 2018-02-19
      • 2011-01-25
      • 1970-01-01
      • 2020-11-28
      相关资源
      最近更新 更多