关于 Request,对于图片下载,chunk 和 response body 有什么不同?
发布于 10 年前 作者 dmoneh 10438 次预览 最后一次回复是 5 年前 来自 问答
最近在做一个项目,将db中的图片展示给用户,用node做中间层:浏览器请求图片,node从db中取图片,返回给浏览器。 目前试通的一种方案是
request.get(url).pipe(response);
但是当我想要先获取图片数据,再返回,然后转交给浏览器的response,如下
request.get(url,function(error,res,body){
return body;
})
发现body并不是图片数据。 但是呢,换下面这种方式,就可以。
var content = '';
request.get(url)
on('data',function(data){
content += data;
});
PS: body比下面content最终形成的文件要大一点。
这是为啥呢?没什么头绪。 求帮助啊! 先谢谢啦!
7 回复
body的话直接返回的是utf8格式(request默认的编码)的二进制图片数据,而chunk则是流形式的二进制数据,按照编码方式的话用utf8编码后的长度自然比源二进制数据长,如果要相等则需要设置对应的编码方式。
你这用法问题有点多
你可以试试这个:https://github.com/alsotang/superagentparse ,跟 superagent 配合使用。
@joney-pinkman
谢谢啦,你说的是对的。默认的body确实是utf-8格式
我设置了一下encoding,如下
这个时候,body就是图片数据了。 按照request官方的说法是:If null, the body is returned as a Buffer。 如果设置encoding为null,那么返回的response就是buffer。
再次感谢。
@alsotang
谢谢回复。 大家都很热心啊。:)
你提到的两个库,公司刚好正在做一个涉及到中文的项目,我会认真学习一下。
谢谢。
@dmoneh 太感谢了,昨天找弄了一晚,现在用你提供的方法好了,感谢大家的分享!!!
我也补一个坑吧,https://github.com/i5ting/testchunks 专门用于测试chunk的
多谢