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 相关文章推荐
抛弃Nginx使用nodejs做反向代理服务器
Jul 17 NodeJs
图片上传之FileAPI与NodeJs
Jan 24 NodeJs
深入nodejs中流(stream)的理解
Mar 27 NodeJs
nodejs入门教程二:创建一个简单应用示例
Apr 24 NodeJs
nodeJS实现路由功能实例代码
Jun 08 NodeJs
nodejs中art-template模板语法的引入及冲突解决方案
Nov 07 NodeJs
nodejs多版本管理总结
Apr 03 NodeJs
nodejs 十六进制字符串型数据与btye型数据相互转换
Jul 30 NodeJs
nodejs aes 加解密实例
Oct 10 NodeJs
NodeJS服务器实现gzip压缩的示例代码
Oct 12 NodeJs
CentOS7中源码编译安装NodeJS的完整步骤
Oct 13 NodeJs
Nodejs在局域网配置https访问的实现方法
Oct 17 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
php防注
2007/01/15 PHP
利用php实现禁用IE和火狐的缓存问题
2012/12/03 PHP
基于PHP5魔术常量与魔术方法的详解
2013/06/13 PHP
PHP JSON出错:Cannot use object of type stdClass as array解决方法
2014/08/16 PHP
CI框架常用经典操作类总结(路由,伪静态,分页,session,验证码等)
2016/11/21 PHP
JavaScript onkeydown事件入门实例(键盘某个按键被按下)
2014/10/17 Javascript
微信JSSDK上传图片
2015/08/23 Javascript
javascript实现倒计时跳转页面
2016/01/17 Javascript
基于JavaScript实现抽奖系统
2018/01/16 Javascript
关于jquery layui弹出层的使用方法
2018/04/21 jQuery
vue-cli监听组件加载完成的方法
2018/09/07 Javascript
vue 监听某个div垂直滚动条下拉到底部的方法
2018/09/15 Javascript
vue微信分享出来的链接点开是首页问题的解决方法
2018/11/28 Javascript
微信小程序实现多个按钮的颜色状态转换
2019/02/15 Javascript
vue 根据选择条件显示指定参数的例子
2019/11/09 Javascript
JS严格模式原理与用法实例分析
2020/04/27 Javascript
Python实例之wxpython中Frame使用方法
2014/06/09 Python
CentOS 7下安装Python 3.5并与Python2.7兼容并存详解
2017/07/07 Python
Jupyter中直接显示Matplotlib的图形方法
2018/05/24 Python
Tensorflow 训练自己的数据集将数据直接导入到内存
2018/06/19 Python
Python实现求解一元二次方程的方法示例
2018/06/20 Python
Python 2.7中文显示与处理方法
2018/07/16 Python
python使用xlsxwriter实现有向无环图到Excel的转换
2018/12/12 Python
python标准库sys和OS的函数使用方法与实例详解
2020/02/12 Python
canvas拼图功能实现代码示例
2018/11/21 HTML / CSS
THE OUTNET英国官网:国际设计师品牌折扣网站
2016/08/14 全球购物
黄继光的英雄事迹材料
2014/02/13 职场文书
小露珠教学反思
2014/04/30 职场文书
计算机软件专业求职信
2014/06/10 职场文书
大学新生军训自我鉴定范文
2014/09/13 职场文书
优秀班主任事迹材料
2014/12/16 职场文书
爱岗敬业事迹材料
2014/12/24 职场文书
研讨会通知
2015/04/27 职场文书
宣传稿格式范文
2015/07/23 职场文书
电子表的操作介绍说明书
2019/10/28 职场文书
python 办公自动化——基于pyqt5和openpyxl统计符合要求的名单
2021/05/25 Python