Dan*_*iel 8 stream utf-8 node.js
我手头的任务是在 NodeJs 中读取 jpeg 文件并将其作为 http-response 发送以回答服务器请求。似乎是微不足道的。但是,我的第一个解决方案失败了。浏览器确实收到了一些二进制乱码,比原始文件大了大约 30%。
我的代码是(简化; res 是 SeverResponse 类型):
...
var fs = require('fs');
var stream = fs.createReadStream(pathToJPEG, {encoding: 'binary'});
res.setHeader('Content-Type', "image/jpeg");
stream.pipe(res);
...
Run Code Online (Sandbox Code Playgroud)
事实证明,到达浏览器的是我的源数据的 UTF-8 编码版本。我还能够排除响应对象是罪魁祸首。当我给它一个替代流(来自缓冲区,而不是文件)时,它工作得很好。
原来我的问题的解决方案是删除选项 {encoding: 'binary'}。我的浏览器收到了正确的图片:
...
var fs = require('fs');
var stream = fs.createReadStream(pathToJPEG);
res.setHeader('Content-Type', "image/jpeg");
stream.pipe(res);
...
Run Code Online (Sandbox Code Playgroud)
我的问题是:为什么?
第一个非工作版本应该是正确的似乎很直观,因为它明确声明了如何读取文件。
| 归档时间: |
|
| 查看次数: |
14802 次 |
| 最近记录: |