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访问ActiveX对象,以操作Access数据库为例。
Dec 15 NodeJs
nodejs中转换URL字符串与查询字符串详解
Nov 26 NodeJs
轻松创建nodejs服务器(7):阻塞操作的实现
Dec 18 NodeJs
NodeJS制作爬虫全过程(续)
Dec 22 NodeJs
nodejs微信公众号支付开发
Sep 19 NodeJs
详解NodeJs支付宝移动支付签名及验签
Jan 06 NodeJs
初识NodeJS服务端开发入门(Express+MySQL)
Apr 07 NodeJs
nodejs入门教程三:调用内部和外部方法示例
Apr 24 NodeJs
nodejs动态创建二维码的方法
Aug 12 NodeJs
nodejs 图解express+supervisor+ejs的用法(推荐)
Sep 08 NodeJs
nodejs操作mongodb的增删改查功能实例
Nov 09 NodeJs
Nodejs实现WebSocket代码实例
May 19 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中使用接口实现工厂设计模式的代码
2012/06/17 PHP
php实现用于验证所有类型的信用卡类
2015/03/24 PHP
自制PHP框架之模型与数据库
2017/05/07 PHP
php安装扩展mysqli的实现步骤及报错解决办法
2017/09/23 PHP
dojo 之基础篇(三)之向服务器发送数据
2007/03/24 Javascript
Jquery ajaxsubmit上传图片实现代码
2010/11/04 Javascript
到处都是jQuery选择器的年代 不了解它们的性能,行吗
2012/06/18 Javascript
解决extjs grid 不随窗口大小自适应的改变问题
2014/01/26 Javascript
jquery处理json数据实例分析
2014/06/03 Javascript
jquery插件qrcode在线生成二维码
2015/04/26 Javascript
详细分析使用AngularJS编程中提交表单的方式
2015/06/19 Javascript
js判断鼠标位置是否在某个div中的方法
2016/02/26 Javascript
JavaScript操作HTML DOM节点的基础教程
2016/03/11 Javascript
jQuery利用sort对DOM元素进行排序操作
2016/11/07 Javascript
详解用webpack2.0构建vue2.0超详细精简版
2017/04/05 Javascript
vue.js,ajax渲染页面的实例
2018/02/11 Javascript
详解使用vue-cli脚手架初始化Vue项目下的项目结构
2018/03/08 Javascript
微信小程序开发(一):服务器获取数据列表渲染操作示例
2020/06/01 Javascript
如何HttpServletRequest文件对象并储存
2020/08/14 Javascript
python日志记录模块实例及改进
2017/02/12 Python
pycharm 设置项目的根目录教程
2020/02/12 Python
python 数据分析实现长宽格式的转换
2020/05/18 Python
浅谈Python程序的错误:变量未定义
2020/06/02 Python
Python中的特殊方法以及应用详解
2020/09/20 Python
纯css3无js实现的Android Logo(有简单动画)
2013/01/21 HTML / CSS
澳大利亚吉他在线:Artist Guitars
2017/03/30 全球购物
MIS软件工程师的面试题
2016/04/22 面试题
广告设计专业自荐信范文
2013/11/14 职场文书
课例研修方案
2014/05/31 职场文书
2014基层党员批评与自我批评范文
2014/09/24 职场文书
审计局班子四风对照检查材料思想汇报
2014/10/07 职场文书
12.4全国法制宣传日活动方案
2014/11/02 职场文书
先进个人主要事迹范文
2015/11/04 职场文书
终止合同协议书范本
2016/03/22 职场文书
Django 实现jwt认证的示例
2021/04/30 Python
python使用matplotlib绘制图片时x轴的刻度处理
2021/08/30 Python