图像下载的未定义值

时间:2014-10-09 04:35:29

标签: node.js request fs

我试图下载这个图像一百万种方式,我总是在NodeJS中得到一个未定义的值,有人可以帮助我!图像确实下载了,但是我无法用它做任何事情,所以它显然变得毫无用处!

var rawImg = urlHtml('img').attr('src'); // got the image needed!                                


                            var download = function (rawImg, filename, callback) {
                                request.head(rawImg, function (err, res, body) {
                                    console.log('content-type:', res.headers['content-type']);
                                    console.log('content-length:', res.headers['content-length']);

                                    request(rawImg).pipe(fs.createWriteStream(__dirname + '/public/img/test.jpg')).on('close', function(callback) {

                                        console.log(callback); // always getting undefined
                                    });
                                });
                            };

                            download(rawImg, function () {
                                console.log('done'); // doesn't even launch because gets undefined before
                            });

3 个答案:

答案 0 :(得分:0)

以下是一些示例代码,可将图像下载并保存到硬盘中。以下是一些原因为什么它与您的代码不同:

  1. 我不确定urlHtml是什么函数,但我的猜测是rawImg变量实际上只是src html元素上的img属性。如果是这种情况,那么rawImg实际上只是一个包含图像URL的字符串。这就是为什么在我的示例代码中,我已将代码中的变量重命名为url
  2. 您的函数download需要三个参数(rawImgfilenamecallback),但您只需使用两个参数rawImg调用该函数回调函数)。由于没有提供文件名,因此您的下载功能认为您打算成为回调函数的函数实际上是文件名。由于没有第三个参数,callback未定义。
  3. 使用request.head函数只会检索没有正文的HTTP标头。因此,您实际上不会使用HTTP HEAD请求获取图像字节。有关HTTP HEAD的更多详细信息,请参阅[https://ochronus.com/http-head-request-good-uses/本文]。由于我们有兴趣下载图像本身,我们应该执行HTTP头的HTTP GET。这就是我的示例代码调用request.get
  4. 的原因
  5. .on('close', function(callback) {...})不正确,因为触发close事件时,不会使用任何参数调用on-close函数。因此callback未定义,因为close事件触发时它不会传递给函数。这就是为什么在我的例子中,on-close函数没有callback参数。
  6. 注1 :我的示例代码添加了一些require调用以确保完整性,因为此问题被标记为nodejs问题。看起来您已在范围内拥有fsrequest个变量,因此您可能不需要再次require这些变量。

    注意2 :如果您从urlHtml('img').attr('src');电话中获取了网址,请将我的代码中的硬编码网址替换为urlHtml('img').attr('src');

    工作,示例代码(已测试且全部!!):

    var fs = require('fs')
    var request = require('request')
    
    var url = 'https://avatars0.githubusercontent.com/u/5980429?v=2&s=200'
    
    var download = function (url, filename, callback) {
        request.get(url).pipe(fs.createWriteStream(__dirname + '/' + filename)).on('close', function() {
            callback()
        })
    };
    
    download(url, 'image.png', function () {
        console.log('Image downloaded successfully. It is now saved in a file called "image.png" in the current working directory!');
    });
    

答案 1 :(得分:0)

request(rawImg).pipe( fs.createWriteStream(__dirname + '/public/img/test.jpg')).on('close',function(callback) { console.log(callback); // always getting undefined });

callback();

替换粗体线

' undefined'您看到的值是console.log的返回值。

答案 2 :(得分:0)

对于任何想知道的人,我都知道我的问题是什么。我试图下载嵌套对象中的内容。结束使用underscore.js !!