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之请求路由概述
Jul 05 NodeJs
nodejs 提示‘xxx’ 不是内部或外部命令解决方法
Nov 20 NodeJs
轻松创建nodejs服务器(3):代码模块化
Dec 18 NodeJs
nodejs批量修改文件编码格式
Jan 22 NodeJs
nodejs搭建本地服务器并访问文件的方法
Mar 03 NodeJs
详谈Angular路由与Nodejs路由的区别
Mar 05 NodeJs
详解nodejs微信公众号开发——4.自动回复各种消息
Apr 11 NodeJs
详解nodeJS之二进制buffer对象
Jun 03 NodeJs
nodejs socket服务端和客户端简单通信功能
Sep 14 NodeJs
nodejs+mongodb aggregate级联查询操作示例
Mar 17 NodeJs
Nodejs 和 Electron ubuntu下快速安装过程
May 04 NodeJs
详解Nodejs内存治理
May 13 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
第十四节 命名空间 [14]
2006/10/09 PHP
php rsa 加密,解密,签名,验签详解
2016/12/06 PHP
Laravel 5.5官方推荐的Nginx配置学习教程
2017/10/06 PHP
Ajax中的JSON格式与php传输过程全面解析
2017/11/14 PHP
ThinkPHP5.0框架控制器继承基类和自定义类示例
2018/05/25 PHP
用js实现预览待上传的本地图片
2007/03/15 Javascript
Extjs列表详细信息窗口新建后自动加载解决方法
2010/04/02 Javascript
jquery事件与函数的使用介绍
2013/09/29 Javascript
控制文字内容的显示与隐藏示例
2014/06/11 Javascript
jquery专业的导航菜单特效代码分享
2015/08/29 Javascript
JavaScript编程的单例设计模讲解
2015/11/10 Javascript
Bootstrap每天必学之按钮
2015/11/26 Javascript
学习JavaScript设计模式之装饰者模式
2016/01/19 Javascript
JavaScript中使用数组方法汇总
2016/02/16 Javascript
浅谈js中的in-for循环
2016/06/28 Javascript
AngularJS 获取ng-repeat动态生成的ng-model值实例详解
2016/11/29 Javascript
使用axios实现上传图片进度条功能
2017/12/21 Javascript
webpack 从指定入口文件中提取公共文件的方法
2018/11/13 Javascript
Vue实现省市区三级联动
2020/12/27 Vue.js
python daemon守护进程实现
2016/08/27 Python
浅谈用VSCode写python的正确姿势
2017/12/16 Python
PyCharm鼠标右键不显示Run unittest的解决方法
2018/11/30 Python
python 多维高斯分布数据生成方式
2019/12/09 Python
给 TensorFlow 变量进行赋值的方式
2020/02/10 Python
Django 博客实现简单的全文搜索的示例代码
2020/02/17 Python
git查看、创建、删除、本地、远程分支方法详解
2020/02/18 Python
通过实例解析Python return运行原理
2020/03/04 Python
Python读取xlsx数据生成图标代码实例
2020/08/12 Python
Python实现迪杰斯特拉算法过程解析
2020/09/18 Python
项目副经理岗位职责
2013/12/30 职场文书
员工拾金不昧表扬信
2014/01/09 职场文书
致全体运动员广播稿
2014/02/01 职场文书
《雨霖铃》听课反思
2014/02/13 职场文书
《青蛙看海》教学反思
2014/04/23 职场文书
法院个人总结
2015/03/03 职场文书
诚信考试承诺书范文
2015/04/29 职场文书