使用node.js下载和保存网站图标?

3
我正在尝试使用Node.js从网站下载favicon,但遇到了一些问题。
我的代码如下:
//Imports ...

var theurl = http.createClient(80, 'a1.twimg.com');
var requestUrl = 'http://a1.twimg.com/a/1284159889/images/favicon.ico';
var request = theurl.request('GET', requestUrl, {"host": "a1.twimg.com"});
request.end();

request.addListener('response', function (response)
{
        var body = '';
        response.addListener('data', function (chunk) {
                body += chunk;
        });
        response.addListener("end", function() {
            fs.writeFileSync('favicon.ico', body.toString('binary'), 'binary');
        });
});

结果产生的图标很糟糕,我怀疑这与我获取网站图标时的编码有关。请问正确的方法是什么?
2个回答

5

在响应回调的第一行尝试使用response.setEncoding('binary'),或者(因为这不是节点首选的编码设置)response.setEncoding(null),这将使其成为缓冲区。然后直接写入正文,而不对其执行任何操作。

fs.writeFileSync('favicon.ico', body, 'binary');


使用response.setEncoding(null)无法工作,但使用response.setEncoding('binary')可以正常工作。 - jimt
@jimt - 你也试过用 null 然后跳过写入的第三个参数吗?这样就是 fs.wFS('favicon', body); - Tor Valamo

1

我必须执行 response.setEncoding("binary") 并提供第三个参数给 writeFileSync:

fs.writeFileSync('favicon.ico', body, 'binary')

这个组合对我很有效。谢谢。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接