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读取memcache示例分享
Jan 02 NodeJs
Google官方支持的NodeJS访问API,提供后台登录授权
Jul 29 NodeJs
详解nodejs 文本操作模块-fs模块(三)
Dec 22 NodeJs
配置nodejs环境的方法
May 13 NodeJs
基于nodejs 的多页面爬虫实例代码
May 31 NodeJs
详解nodejs异步I/O和事件循环
Jun 07 NodeJs
Nodejs实现多房间简易聊天室功能
Jun 20 NodeJs
docker中编译nodejs并使用nginx启动
Jun 23 NodeJs
nodejs对express中next函数的一些理解
Sep 08 NodeJs
nodejs简单实现TCP服务器端和客户端的聊天功能示例
Jan 04 NodeJs
NodeJs操作MongoDB教程之分页功能以及常见问题
Apr 09 NodeJs
NodeJS有难度的面试题(能答对几个)
Oct 09 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
2.PHP入门
2006/10/09 PHP
弄了个检测传输的参数是否为数字的Function
2006/12/06 PHP
php学习笔记 PHP面向对象的程序设计
2011/06/13 PHP
教你如何快捷的使用cmd访问mysql小技巧
2014/05/26 PHP
php通过获取头信息判断图片类型的方法
2015/06/26 PHP
php实现简单爬虫的开发
2016/03/28 PHP
实例讲解YII2中多表关联的使用方法
2017/07/21 PHP
PHP实现获取毫秒时间戳的方法【使用microtime()函数】
2019/03/01 PHP
枚举JavaScript对象的函数
2006/12/22 Javascript
弹出窗口并且此窗口带有半透明的遮罩层效果
2014/03/13 Javascript
jQuery filter函数使用方法
2014/05/19 Javascript
JavaScript中对象property的读取和写入方法介绍
2014/12/30 Javascript
微信小程序中添加客服按钮contact-button功能
2018/04/27 Javascript
基于vue-element组件实现音乐播放器功能
2018/05/06 Javascript
微信小程序bindtap事件与冒泡阻止详解
2019/08/08 Javascript
微信公众号平台接口开发 获取access_token过程解析
2019/08/14 Javascript
JavaScript 作用域scope简单汇总
2019/10/23 Javascript
JS数组方法slice()用法实例分析
2020/01/18 Javascript
vuex入门最详细整理
2020/03/04 Javascript
Python中列表(list)操作方法汇总
2014/08/18 Python
python下读取公私钥做加解密实例详解
2017/03/29 Python
浅谈django开发者模式中的autoreload是如何实现的
2017/08/18 Python
Python字典创建 遍历 添加等实用基础操作技巧
2018/09/13 Python
Python增强赋值和共享引用注意事项小结
2019/05/28 Python
django框架中ajax的使用及避开CSRF 验证的方式详解
2019/12/11 Python
window环境pip切换国内源(pip安装异常缓慢的问题)
2019/12/31 Python
HTML5表格_动力节点Java学院整理
2017/07/11 HTML / CSS
基于html5 canvas实现漫天飞雪效果实例
2014/09/10 HTML / CSS
阿根廷在线宠物商店:Puppis
2018/03/23 全球购物
营销总经理的岗位职责
2013/12/15 职场文书
2014年情人节活动方案
2014/02/16 职场文书
高中同学会活动方案
2014/08/14 职场文书
2014年项目经理工作总结
2014/11/24 职场文书
公司管理建议书
2015/09/14 职场文书
初中英语教学反思范文
2016/02/15 职场文书
python树莓派通过队列实现进程交互的程序分析
2021/07/04 Python