Nodejs,提供恒定的图像

时间:2012-05-15 20:04:39

标签: node.js

我正在尝试在node.js中加载图像文件。该文件将在ram中并加载到主循环之外。它只是1x1像素。

如何打开图像文件?

我尝试了以下内容:

var fs = require('fs');
fs.readFile('/home/ubuntu/workspace/rtbopsConfig/rtbServers/rtbNodejsServer/pixel1x1.gif', function(err,pixel){
  if(err) {
    console.error("Could not open file: %s", err);
    process.exit(1);
  }
  console.log(pixel);
});


Server running at http://127.0.0.1:8124/
<Buffer 47 49 46 38 39 61 01 00 01 00 80 00 00 00 00 00 ff ff ff 21 f9 04 01 00 00 00 00 2c 00 00 00 00 01 00 01 00 00 02 01 44 00 3b>

无法显示图片,因为它包含错误。

 res.writeHead(200, {'Content-Type': 'image/gif'});
 res.end(pixel);

1 个答案:

答案 0 :(得分:1)

如果它只是一个1x1的gif图像,那么你不需要存储图像文件并加载它,因为有一个很好的NPM包blankgif已经在代码中已经加载了base64字符串的空白1x1 gif,所以它将更快地工作,然后单独加载图像。此外,还有一些辅助函数可以帮助您在expressjs中发送此图像。

要使用此软件包,您只需使用以下代码:

var blankgif = require('blankgif');
var express = require('express');
var app = express();

app.get('/track.gif', blankgif.sendBlankGif);

app.listen(3000, function () {
  console.log('App listening on port 3000!');
});

我还假设您要实现此功能,因为您需要使用此空白图像跟踪访问者。所以你可以用这个库以两种方式做到这一点:

1)使用blankgif的特殊中间件,为响应对象添加额外的功能

var blankgif = require('blankgif');
var express = require('express');
var app = express();

app.use(blankgif.middleware());

app.get('/track.gif', function(req, res) {
  console.log('request information logged');

  res.set('Cache-Control', 'public, max-age=0');
  res.status(200).sendBlankGif();
});

app.listen(3000, function () {
  console.log('App listening on port 3000!');
});

2)在blankgif.sendBlankGif

之前使用自定义中间件
var blankgif = require('blankgif');
var express = require('express');
var app = express();

app.get('/track.gif', function(req, res, next) {
  console.log('request information logged');
  next();
}, blankgif.sendBlankGif);

app.listen(3000, function () {
  console.log('App listening on port 3000!');
});

此外,如果您出于某些原因不想使用此库(或者如果您想要其他gif图像),也可以手动提供此图像:

var express = require('express');
var app = express();
var fs = require('fs');
var path = require('path');

var buff = null;

fs.readFile(path.resolve(__dirname, 'pixel1x1.gif'), function (err, pixel) {
  if (err) {
    console.error("Could not open file: %s", err);
    process.exit(1);
  }

  buff = pixel;
});

app.get('/track.gif', function (req, res) {
  console.log('request information logged');

  res.type('image/gif');
  res.send(buff);
});

app.listen(3000, function () {
  console.log('App listening on port 3000!');
});