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 相关文章推荐
使用upstart把nodejs应用封装为系统服务实例
Jun 01 NodeJs
使用DNode实现php和nodejs之间通信的简单实例
Jul 06 NodeJs
nodejs微信公众号支付开发
Sep 19 NodeJs
nodejs连接mongodb数据库实现增删改查
Dec 01 NodeJs
NodeJS学习笔记之Module的简介
Mar 24 NodeJs
深入nodejs中流(stream)的理解
Mar 27 NodeJs
浅谈NodeJs之数据库异常处理
Oct 25 NodeJs
Nodejs连接mysql并实现增、删、改、查操作的方法详解
Jan 04 NodeJs
nodejs基于WS模块实现WebSocket聊天功能的方法
Jan 12 NodeJs
nodejs+mongodb aggregate级联查询操作示例
Mar 17 NodeJs
NodeJS 中Stream 的基本使用
Jul 30 NodeJs
基于NodeJS开发钉钉回调接口实现AES-CBC加解密
Aug 20 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
咖啡因含量是由谁决定的?低因咖啡怎么来?低因咖啡适合什么人喝
2021/03/06 新手入门
简单易用的计数器(数据库)
2006/10/09 PHP
网友原创的PHP模板类代码
2008/09/07 PHP
php+mysql事务rollback&commit示例
2010/02/08 PHP
PHP学习笔记之三 数据库基本操作
2011/01/17 PHP
Yii中表单用法实例详解
2016/01/05 PHP
Yii多表联合查询操作详解
2016/06/02 PHP
thinkPHP5框架导出Excel文件简单操作示例
2018/08/03 PHP
php tpl模板引擎定义与使用示例
2019/08/09 PHP
JS实现随机数生成算法示例代码
2013/08/08 Javascript
JavaScript转换二进制编码为ASCII码的方法
2015/04/16 Javascript
AngularJS 中的事件详解
2016/07/28 Javascript
AngularJS基础 ng-mouseleave 指令详解
2016/08/02 Javascript
详解Vue+axios+Node+express实现文件上传(用户头像上传)
2018/08/10 Javascript
微信小程序生成海报分享朋友圈的实现方法
2019/05/06 Javascript
快速搭建Node.js(Express)用户注册、登录以及授权的方法
2019/05/09 Javascript
Vue发布订阅模式实现过程图解
2020/04/30 Javascript
基于JQuery实现页面定时弹出广告
2020/05/08 jQuery
基于javascript实现移动端轮播图效果
2020/12/21 Javascript
jQuery实现本地存储
2020/12/22 jQuery
[08:08]DOTA2-DPC中国联赛2月28日Recap集锦
2021/03/11 DOTA
Python获取单个程序CPU使用情况趋势图
2015/03/10 Python
Python实现简单HTML表格解析的方法
2015/06/15 Python
django静态文件加载的方法
2018/05/20 Python
pyqt5 实现 下拉菜单 + 打开文件的示例代码
2019/06/20 Python
详解用Python调用百度地图正/逆地理编码API
2020/07/02 Python
Python json格式化打印实现过程解析
2020/07/21 Python
python爬取网易云音乐热歌榜实例代码
2020/08/07 Python
波兰最大的儿童服装连锁店之一:5.10.15.
2018/02/11 全球购物
广州一家公司的.NET面试题
2016/06/11 面试题
linux面试题参考答案(8)
2016/04/19 面试题
医院合作协议书
2014/08/19 职场文书
2014高三学生考试作弊检讨书
2014/12/14 职场文书
画展邀请函
2015/01/31 职场文书
Nginx本地目录映射实现代码实例
2021/03/31 Servers
sql中mod()函数取余数的用法
2021/05/29 SQL Server