CNode

Request网络图片后如何返回呢?

问答
Lloft218发布于10 年前最后回复10 年前6 回复5855 浏览0 收藏

譬如请求的图片地址: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)

J
jayfen2016#1·10 年前

[color=#DF20DF]测[/color][color=#BF40BF]试[/color][color=#9F609F]回[/color][color=#808080]帖[/color][color=#609F60]功[/color][color=#40BF40]能[/color]

K
klesh#2·10 年前

request 有个 pipe 方法 ,一行就行了。

request.get(picUrl).pipe(res)
L
loft218#3·10 年前
引用 kleshrequest 有个 pipe 方法 ,一行就行了。

@klesh 这个我知道,但是我的需求是需要先把picUrl的文件下载下来,做md5校验,然后再返回客户端。 按你说的方式似乎是边请求边返回了,无法实现我md5校验的需求呢。请再赐教。

K
klesh#4·10 年前

它本身是一个 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 ,直接用它就行了。

L
loft218#5·10 年前
引用 klesh它本身是一个 EventEmitter pipe 跟事件订阅并不冲突: 另外你 md5 的目的是什么?若是检查文件有没有变动的话,这个服务器有返回 etag ,直接用它就行了。

@klesh 一般网站都会对图片处理,当用户访问的图片不存在则返回一张指定的默认图片(这张图内容大多是该网站的LOGO). 我抓取对方网站的图片,当然不希望显示对方的LOGO图,所以对于对方指定的默认图片我会排除掉。我打算通过md5对该图进行校验,如果是对方的缺省图,那么我就不返回给客户端。 所以我的需求是先请求下来对方的图片,通过md5校验,然后再确定是否返回客户端显示。

K
klesh#6·10 年前

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

来自酷炫的 CNodeMD

参与回复
登录后即可参与回复。登录