譬如请求的图片地址:http://tu.yiwu.com.cn/dw/gou08/8.jpg 我的代码是这样的: var request = require(‘request’); var picUrl = “http://tu.yiwu.com.cn/dw/gou08/8.jpg”; var buffers = []; request.get(picUrl) .on(‘response’,function (resp) { console.log(‘response’); console.log(resp.headers[‘content-type’]); }) .on(‘error’,function (err) { console.log(‘error’); }) .on(‘data’,function (chunk) { console.log(‘data’); buffers.push(chunk); }) .on(‘end’,function () { console.log(‘end’); res.type(‘png’).send(new Buffer(buffers)); });
然后这样写客户端接收到response,但不是能正确显示的图片。求大神指教~~
[color=#DF20DF]测[/color][color=#BF40BF]试[/color][color=#9F609F]回[/color][color=#808080]帖[/color][color=#609F60]功[/color][color=#40BF40]能[/color]
request 有个 pipe 方法 ,一行就行了。
request.get(picUrl).pipe(res)
@klesh 这个我知道,但是我的需求是需要先把picUrl的文件下载下来,做md5校验,然后再返回客户端。 按你说的方式似乎是边请求边返回了,无法实现我md5校验的需求呢。请再赐教。
它本身是一个 EventEmitter pipe 跟事件订阅并不冲突:
const request = require('request');
const crypto = require('crypto');
const imgUrl = 'http://tu.yiwu.com.cn/dw/gou08/8.jpg';
const fs = require('fs');
var md5 = crypto.createHash('md5');
request
.get(imgUrl)
.on('response', resp => console.log('Etag:', resp.headers.etag))
.on('data', chunk => md5.update(chunk))
.on('end', () => console.log(md5.digest('hex')))
.pipe(fs.createWriteStream('./8.jpg'));
另外你 md5 的目的是什么?若是检查文件有没有变动的话,这个服务器有返回 etag ,直接用它就行了。
@klesh 一般网站都会对图片处理,当用户访问的图片不存在则返回一张指定的默认图片(这张图内容大多是该网站的LOGO). 我抓取对方网站的图片,当然不希望显示对方的LOGO图,所以对于对方指定的默认图片我会排除掉。我打算通过md5对该图进行校验,如果是对方的缺省图,那么我就不返回给客户端。 所以我的需求是先请求下来对方的图片,通过md5校验,然后再确定是否返回客户端显示。