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