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中使用多线程编程的方法实例
Mar 24 NodeJs
nodejs通过phantomjs实现下载网页
May 04 NodeJs
Nodejs Express4.x开发框架随手笔记
Nov 23 NodeJs
基于nodejs+express(4.x+)实现文件上传功能
Nov 23 NodeJs
NodeJs的优势和适合开发的程序
Aug 14 NodeJs
详解Nodejs的timers模块
Dec 22 NodeJs
nodejs搭建本地http服务器教程
Mar 13 NodeJs
NodeJs使用Mysql模块实现事务处理实例
May 31 NodeJs
nodejs(officegen)+vue(axios)在客户端导出word文档的方法
Jul 31 NodeJs
linux 下以二进制的方式安装 nodejs
Feb 12 NodeJs
Nodejs环境实现socket通信过程解析
Jul 03 NodeJs
nodejs使用Sequelize框架操作数据库的实现
Oct 21 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
一个取得文件扩展名的函数
2006/10/09 PHP
php获取301跳转URL简单实例
2013/12/16 PHP
WordPress主题中添加文章列表页页码导航的PHP代码实例
2015/12/22 PHP
微信接口生成带参数的二维码
2017/07/31 PHP
laravel 框架结合关联查询 when()用法分析
2019/11/22 PHP
jquery异步循环获取功能实现代码
2010/09/19 Javascript
5个最佳的Javascript日期处理类库分享
2012/04/15 Javascript
JQuery 返回布尔值Is()条件判断方法代码
2012/05/14 Javascript
禁用Enter键表单自动提交实现代码
2014/05/22 Javascript
js文字横向滚动特效
2015/11/11 Javascript
客户端验证用户名和密码的方法详解
2016/06/16 Javascript
jquery+CSS3实现3D拖拽相册效果
2016/07/18 Javascript
jQuery+css实现非常漂亮的水平导航菜单效果
2016/07/27 Javascript
微信小程序 二维码canvas绘制实例详解
2017/01/06 Javascript
抖音上用记事本编写爱心小程序教程
2019/04/17 Javascript
vue.js 2.*项目环境搭建、运行、打包发布的详细步骤
2019/05/01 Javascript
javascript如何使用函数random来实现课堂随机点名方法详解
2020/07/28 Javascript
js实现简易点击切换显示或隐藏
2020/11/29 Javascript
Python 命令行非阻塞输入的小例子
2013/09/27 Python
python实现跨文件全局变量的方法
2014/07/07 Python
python看某个模块的版本方法
2018/10/16 Python
基于Python实现船舶的MMSI的获取(推荐)
2019/10/21 Python
PyTorch的SoftMax交叉熵损失和梯度用法
2020/01/15 Python
opencv python 图片读取与显示图片窗口未响应问题的解决
2020/04/24 Python
如何在VSCode下使用Jupyter的教程详解
2020/07/13 Python
python Tornado框架的使用示例
2020/10/19 Python
HUGO BOSS美国官方网上商店:世界知名奢侈品牌
2017/08/04 全球购物
viagogo波兰票务平台:演唱会、体育比赛、戏剧门票
2018/04/23 全球购物
诺心蛋糕官网:LE CAKE
2018/08/25 全球购物
智能钱包:Ekster
2019/11/21 全球购物
乐高西班牙官方商店:LEGO Shop ES
2019/12/01 全球购物
Loreto Gallo英国:欧洲领先的在线药房
2021/01/21 全球购物
网络体系结构及协议的定义
2014/03/13 面试题
超市理货员岗位职责
2014/07/04 职场文书
JavaScript实现贪吃蛇游戏
2021/06/16 Javascript
MySQL窗口函数的具体使用
2021/11/17 MySQL