【发布时间】:2018-08-12 16:21:53
【问题描述】:
我正在用 Nodejs 构建一些网络爬虫。刮板可以做的一件事是下载图像。一切都很好,直到我尝试抓取一个网站,其图片不包含 url 中的文件扩展名,例如:https://example.com/images/someimagewithoutextension
这是我正在使用的小库中的一些代码,用于下载和保存图像:
options.encoding = null
request(options, (err, res, body) => {
if (err) {
return onError(err, done)
}
if (body && (res.statusCode === 200 || res.statusCode === 201)) {
if (!path.extname(options.dest)) {
options.dest = path.join(options.dest, path.basename(options.url))
}
fs.writeFile(options.dest, body, 'binary', (err) => {
if (err) {
return onError(err, done)
}
if (typeof done === 'function') {
done(false, options.dest, body)
}
})
}
所以,当图片 URL 缺少扩展名时,我会收到如下错误:
错误:ENOENT:没有这样的文件或目录,打开 'C:\Users\someuser\Desktop\nodescraper\images\somefilenamewithoutextension'
当我 console.log() 响应的“正文”时,我得到一些缓冲区数组(因此我无法检查 mime 类型或类似的东西),据我了解,这表示一个流.当我从请求配置中删除 encoding:null 时,我得到了一组字符,但节点实际上崩溃了。
我怎样才能保存这些图像?
【问题讨论】: