首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将图像写入本地服务器

将图像写入本地服务器
EN

Stack Overflow用户
提问于 2011-03-14 03:38:31
回答 6查看 137.6K关注 0票数 65

更新

去年接受的答案是好的,但今天我会使用其他人都使用的软件包:https://github.com/mikeal/request

原始

我试图抓取谷歌的标志,并将其保存到我的服务器上,并使用node.js。

这就是我现在拥有的,但不起作用的东西:

代码语言:javascript
复制
        var options = {
            host: 'google.com',
            port: 80,
            path: '/images/logos/ps_logo2.png'
        };

        var request = http.get(options);

        request.on('response', function (res) {
            res.on('data', function (chunk) {
                fs.writeFile(dir+'image.png', chunk, function (err) {
                    if (err) throw err;
                    console.log('It\'s saved!');
                });
            });
        });

我该怎么做呢?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-03-14 04:08:40

这里发生了几件事:

  1. 我假设您需要fs/http,并设置dir变量:)
  2. google.com重定向到www.google.com,所以您保存的是重定向响应的主体,而不是图像
  3. 回应是流式的。这意味着“数据”事件会触发很多次,而不是一次。您必须保存并将所有块连接在一起才能得到完整的响应体。
  4. 由于您正在获取二进制数据,所以您必须在响应和writeFile (默认为utf8)上相应地设置编码。

这应该是可行的:

代码语言:javascript
复制
var http = require('http')
  , fs = require('fs')
  , options

options = {
    host: 'www.google.com'
  , port: 80
  , path: '/images/logos/ps_logo2.png'
}

var request = http.get(options, function(res){
    var imagedata = ''
    res.setEncoding('binary')

    res.on('data', function(chunk){
        imagedata += chunk
    })

    res.on('end', function(){
        fs.writeFile('logo.png', imagedata, 'binary', function(err){
            if (err) throw err
            console.log('File saved.')
        })
    })

})
票数 93
EN

Stack Overflow用户

发布于 2013-12-10 09:30:58

这个线程是旧的,但是我想对https://github.com/mikeal/request包做同样的事情。

这里是一个有用的例子

代码语言:javascript
复制
var fs      = require('fs');
var request = require('request');
// Or with cookies
// var request = require('request').defaults({jar: true});

request.get({url: 'https://someurl/somefile.torrent', encoding: 'binary'}, function (err, response, body) {
  fs.writeFile("/tmp/test.torrent", body, 'binary', function(err) {
    if(err)
      console.log(err);
    else
      console.log("The file was saved!");
  }); 
});
票数 40
EN

Stack Overflow用户

发布于 2012-01-07 17:03:09

我建议您使用http-请求,这样甚至可以管理重定向。

代码语言:javascript
复制
var http = require('http-request');
var options = {url: 'http://localhost/foo.pdf'};
http.get(options, '/path/to/foo.pdf', function (error, result) {
    if (error) {
        console.error(error);
    } else {
        console.log('File downloaded at: ' + result.file);
    }
});
票数 27
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5294470

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档