2

A 有这个代码:

var http = require('http');
var fs = require('fs');
var data;
var options = {
  host: 'nodejs.org',
  port: 80,
  path: '/images/logo.png',
  method: 'GET'
};
var req = http.request(options, function(res) {
  res.on('data', function (chunk) {
    data += chunk;
  });
  res.on('end', function () {
    fs.writeFile('1.png', data, function (err) {
      if(err) 
        console.log('NNOOOOOOOOOOOO');
    });
  });
});
req.on('error', function(e) {
  console.log('error: ' + e.message);
});
req.end();

此脚本创建文件 1.png 并保存获取的数据,但我无法在 Windows 中打开它。

请帮忙。

4

2 回答 2

2

你可以这样做 :

var req = http.request(options, function(res) {
  var file = fs.createWriteStream('1.png');
  res.pipe(file);
});
req.on('error', function(e) {
  console.log('error: ' + e.message);
});
req.end();

更新

我检查了你的代码,发现了两件事:

  1. data正确初始化。
  2. 使用 setEncoding 将响应视为二进制。不需要指定编码writeFile

http.request所以只需在回调的开头添加这两行:

  res.setEncoding("binary") ;
  var data='';

那么你的代码应该可以正常工作。

于 2013-05-31T15:14:05.373 回答
1

您需要设置正确的编码。

res.setEncoding('binary')


fs.writeFile('1.png', data, {encoding: 'binary'}, function(err){
于 2013-05-31T15:06:47.907 回答