nodejs读取图片返回给浏览器显示


Posted in NodeJs onJuly 25, 2019

本文主要是使用nodejs处理图片等资源返回给浏览器显示方法,但不只限制于图片,也可以是音频视频等其他非字符串文件的返回和显示。也可以扩展成nodejs静态资源服务器的开发方法。

请求头说明

在http响应里面有几个重要的东西,Content-Type 说明文件渲染MIME类型,这是我们本文的相关处理关键。

常用的MIME类型

{
 "css": "text/css",
 "gif": "image/gif",
 "html": "text/html",
 "ico": "image/x-icon",
 "jpeg": "image/jpeg",
 "jpg": "image/jpeg",
 "js": "text/javascript",
 "json": "application/json",
 "pdf": "application/pdf",
 "png": "image/png",
 "svg": "image/svg+xml",
 "swf": "application/x-shockwave-flash",
 "tiff": "image/tiff",
 "txt": "text/plain",
 "wav": "audio/x-wav",
 "wma": "audio/x-ms-wma",
 "wmv": "video/x-ms-wmv",
 "xml": "text/xml"
}

处理方法

一、静态返回资源

原理:

使用node.js的fs.readFile来处理。根据请求地址,转换成实际的文件地址。判断文件是否存在,不存在返回404,存在则读取文件 ,并返回文件

//设置请求的返回头type,content的type类型列表见上面
response.setHeader("Content-Type", contentType);
//格式必须为 binary 否则会出错
var content = fs.readFileSync(url,"binary"); 
response.writeHead(200, "Ok");
response.write(content,"binary"); //格式必须为 binary,否则会出错
response.end();

二、动态文件流处理

原理:

使用nodejs 的fs.createReadStream来处理,这样处理的好处是断点续传。

response.set( 'content-type', mimeType );//设置返回类型
var stream = fs.createReadStream( imageFilePath );
var responseData = [];//存储文件流
if (stream) {//判断状态
 stream.on( 'data', function( chunk ) {
  responseData.push( chunk );
 });
 stream.on( 'end', function() {
  var finalData = Buffer.concat( responseData );
  response.write( finalData );
  response.end();
 });
}

1.客户端读取文件 var content = fs.createReadStream(filePath);
2.把内容转为数组 var buffer = new Buffer(content); 传给 httpServer这一步需要特别注意,一定不能把 content 当成普通的字符串处理传给 httpServer
3.httpServer 解析出数组 var list = …
4.httpServer 把数组转为 Buffer, var buffer = new Buffer(list);
5.返回 response.write(buffer.toString(),”binary”); //注意,这里必须转为字符串,不能以 Buffer 传给浏览器.
6.值得注意的是,这里的 buffer 不能直接返回给客户端,nodejs 以 binary 格式读取的文件就是一个字符串,只是编码不是普通的 utf-8

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

NodeJs 相关文章推荐
Nodejs使用mysql模块之获得更新和删除影响的行数的方法
Mar 18 NodeJs
Windows 系统下设置Nodejs NPM全局路径
Apr 26 NodeJs
windows 下安装nodejs 环境变量设置
Feb 02 NodeJs
nodejs基础应用
Feb 03 NodeJs
NodeJs使用Mysql模块实现事务处理实例
May 31 NodeJs
nodeJS微信分享
Dec 20 NodeJs
nodejs基于express实现文件上传的方法
Mar 19 NodeJs
NodeJs搭建本地服务器之使用手机访问的实例讲解
May 12 NodeJs
nodejs require js文件入口,在package.json中指定默认入口main方法
Oct 10 NodeJs
Nodejs处理异常操作示例
Dec 25 NodeJs
nodejs制作小爬虫功能示例
Feb 24 NodeJs
NodeJS配置CORS实现过程详解
Dec 02 NodeJs
关于NodeJS中的循环引用详解
Jul 23 #NodeJs
typescript nodejs 依赖注入实现方法代码详解
Jul 21 #NodeJs
nodejs 递归拷贝、读取目录下所有文件和目录
Jul 18 #NodeJs
nodejs二进制与Buffer的介绍与使用
Jul 11 #NodeJs
nodejs中各种加密算法的实现详解
Jul 11 #NodeJs
监控Nodejs的性能实例代码
Jul 02 #NodeJs
搭建一个nodejs脚手架的方法步骤
Jun 28 #NodeJs
You might like
把从SQL中取出的数据转化成XMl格式
2006/10/09 PHP
php读取本地json文件的实例
2018/03/07 PHP
PHP实现的ID混淆算法类与用法示例
2018/08/10 PHP
日期 时间js控件
2009/05/07 Javascript
Script的加载方法小结
2011/01/12 Javascript
javascript中获取下个月一号,是星期几
2012/06/01 Javascript
jQuery简单实现QQ空间点赞已经取消点赞
2015/04/02 Javascript
jquery用ajax方式从后台获取json数据后如何将内容填充到下拉列表
2015/08/26 Javascript
ReactJs设置css样式的方法
2017/06/08 Javascript
underscore之Chaining_动力节点Java学院整理
2017/07/10 Javascript
浅谈vue.js中v-for循环渲染
2017/07/26 Javascript
对node通过fs模块判断文件是否是文件夹的实例讲解
2019/06/10 Javascript
解决layui的input独占一行的问题
2019/09/10 Javascript
vue+layui实现select动态加载后台数据的例子
2019/09/20 Javascript
js实现烟花特效
2020/03/02 Javascript
vue-admin-template配置快捷导航的代码(标签导航栏)
2020/09/04 Javascript
[23:21]Ti4 冒泡赛第二轮DK vs C9 2
2014/07/14 DOTA
Python实现的百度站长自动URL提交小工具
2014/06/27 Python
Python 字符串换行的多种方式
2018/09/06 Python
Python+OpenCV图片局部区域像素值处理详解
2019/01/23 Python
详解利用python+opencv识别图片中的圆形(霍夫变换)
2019/07/01 Python
pandas 使用均值填充缺失值列的小技巧分享
2019/07/04 Python
python selenium循环登陆网站的实现
2019/11/04 Python
解决django model修改添加字段报错的问题
2019/11/18 Python
Python 实现向word(docx)中输出
2020/02/13 Python
Flask缓存静态文件的具体方法
2020/08/02 Python
Python爬虫之Selenium警告框(弹窗)处理
2020/12/04 Python
python math模块的基本使用教程
2021/01/16 Python
澳大利亚办公室装修:JasonL Office Furniture
2019/06/25 全球购物
欧姆龙医疗欧洲有限公司:Omron Healthcare Europe B.V
2020/06/13 全球购物
饮料业务员岗位职责
2013/12/15 职场文书
婚礼主持结束词
2014/03/13 职场文书
莫言诺贝尔获奖演讲稿
2014/05/21 职场文书
办公室主任岗位承诺书
2014/05/29 职场文书
公证处委托书
2015/01/28 职场文书
2017大学生寒假社会实践心得体会
2016/01/14 职场文书