Request网络图片后如何返回呢?
发布于 8 年前 作者 loft218 4979 次浏览 来自 问答

譬如请求的图片地址: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,但不是能正确显示的图片。求大神指教~~

6 回复

[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校验,然后再确定是否返回客户端显示。

@loft218 那首先要考虑的问题是并发大吗

来自酷炫的 CNodeMD

回到顶部