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
nodejs教程之制作一个简单的文章发布系统
Nov 21 NodeJs
Nodejs全局安装和本地安装的不同之处
Jul 04 NodeJs
Mac 安装 nodejs方法(图文详细步骤)
Oct 30 NodeJs
nodejs中密码加密处理操作详解
Mar 20 NodeJs
对mac下nodejs 更新到最新版本的最新方法(推荐)
May 17 NodeJs
深入理解nodejs搭建静态服务器(实现命令行)
Feb 05 NodeJs
基于nodejs的微信JS-SDK简单应用实现
May 21 NodeJs
nodejs读取图片返回给浏览器显示
Jul 25 NodeJs
nodejs开发一个最简单的web服务器实例讲解
Jan 02 NodeJs
nodejs如何在package.json中设置多条启动命令
Mar 16 NodeJs
如何利用nodejs实现命令行游戏
Nov 24 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创建PDF中文文档
2006/10/09 PHP
php引用计数器进行垃圾收集机制介绍
2012/09/19 PHP
PHP使用header()输出图片缓存实例
2014/12/09 PHP
PHP实现的mysql读写分离操作示例
2018/05/22 PHP
php依赖注入知识点详解
2019/09/23 PHP
Display SQL Server Version Information
2007/06/21 Javascript
一段效率很高的for循环语句使用方法
2007/08/13 Javascript
jquery实现一个简单好用的弹出框
2014/09/26 Javascript
javascript实现客户端兼容各浏览器创建csv并下载的方法
2015/03/23 Javascript
jquery实现Li滚动时滚动条自动添加样式的方法
2015/08/10 Javascript
基于BootStrap的Metronic框架实现页面链接收藏夹功能按钮移动收藏记录(使用Sortable进行拖动排序)
2016/08/29 Javascript
浅谈Angular的$q, defer, promise
2016/12/20 Javascript
jQuery实现拖动剪裁图片作为头像
2016/12/28 Javascript
利用Js+Css实现折纸动态导航效果实例源码
2017/01/25 Javascript
JS Select下拉框(支持输入模糊查询)
2017/02/04 Javascript
JavaScript队列的应用实例详解【经典数据结构】
2017/04/12 Javascript
Javascript创建类和对象详解
2017/05/31 Javascript
微信小程序scroll-view组件实现滚动动画
2018/01/31 Javascript
微信小程序实现上传图片功能
2018/05/28 Javascript
p5.js实现故宫橘猫赏秋图动画
2019/10/23 Javascript
koa2 数据api中间件设计模型的实现方法
2020/07/13 Javascript
[04:51]TI10典藏宝瓶Ⅱ外观视频展示
2020/08/15 DOTA
Python中使用tarfile压缩、解压tar归档文件示例
2015/04/05 Python
详解Python中映射类型(字典)操作符的概念和使用
2015/08/19 Python
Python中if elif else及缩进的使用简述
2018/05/31 Python
详解分布式任务队列Celery使用说明
2018/11/29 Python
详解python3 + Scrapy爬虫学习之创建项目
2019/04/12 Python
使用Python检测文章抄袭及去重算法原理解析
2019/06/14 Python
django ManyToManyField多对多关系的实例详解
2019/08/09 Python
520使用Python实现“我爱你”表白
2020/05/20 Python
canvas 下载二维码和图片加水印的方法
2018/03/21 HTML / CSS
JACK & JONES荷兰官网:男士服装和鞋子
2021/03/07 全球购物
会计找工作求职信范文
2013/12/09 职场文书
2014学习优秀共产党员先进事迹材料思想汇报
2014/09/14 职场文书
解决Mysql的left join无效及使用的注意事项说明
2021/07/01 MySQL
基于Python实现对比Exce的工具
2022/04/07 Python