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 搭建简单的Web服务器详解及实例
Nov 30 NodeJs
nodejs进阶(6)—连接MySQL数据库示例
Jan 07 NodeJs
nodejs使用express创建一个简单web应用
Mar 31 NodeJs
nodejs获取微信小程序带参数二维码实现代码
Apr 12 NodeJs
详解Nodejs 通过 fs.createWriteStream 保存文件
Oct 10 NodeJs
Nodejs异步回调之异常处理实例分析
Jun 22 NodeJs
nodejs require js文件入口,在package.json中指定默认入口main方法
Oct 10 NodeJs
nodejs异步编程基础之回调函数用法分析
Dec 26 NodeJs
nodejs 使用http进行post或get请求的实例(携带cookie)
Jan 03 NodeJs
使用nodejs分离html文件里的js和css详解
Apr 12 NodeJs
详解微信小程序-获取用户session_key,openid,unionid - 后端为nodejs
Apr 29 NodeJs
nodejs中内置模块fs,path常见的用法说明
Nov 07 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创建多级目录代码
2008/06/05 PHP
PHP 变量类型的强制转换
2009/10/23 PHP
PHP封装的简单连接MongoDB类示例
2019/02/13 PHP
走出JavaScript初学困境—js初学
2008/12/29 Javascript
js实现的仿新浪微博完美的时间组件升级版
2011/12/20 Javascript
侧栏跟随滚动的简单实现代码
2013/03/18 Javascript
js实现右下角可关闭最小化div(可用于展示推荐内容)
2013/06/24 Javascript
javascript版的in_array函数(判断数组中是否存在特定值)
2014/05/09 Javascript
Vue.js 2.0 和 React、Augular等其他前端框架大比拼
2016/10/08 Javascript
bootstrap模态框消失问题的解决方法
2016/12/02 Javascript
Angular2 Service实现简单音乐播放器服务
2017/02/24 Javascript
微信小程序 自动登陆PHP源码实例(源码下载)
2017/05/08 Javascript
vue 国际化 vue-i18n 双语言 语言包
2018/06/07 Javascript
vue改变对象或数组时的刷新机制的方法总结
2019/04/24 Javascript
Vue使用Proxy监听所有接口状态的方法实现
2019/06/07 Javascript
js实现随机数小游戏
2019/06/28 Javascript
如何对react hooks进行单元测试的方法
2019/08/14 Javascript
[36:05]DOTA2亚洲邀请赛 3.31 小组赛 A组 Liquid vs Optic
2018/04/01 DOTA
[02:33]2018 DOTA2亚洲邀请赛回顾视频 再次拾起那些美妙的时刻
2018/04/10 DOTA
如何更优雅地写python代码
2019/07/02 Python
python 实现在无序数组中找到中位数方法
2020/03/03 Python
python 获取字典特定值对应的键的实现
2020/09/29 Python
python 实现音频叠加的示例
2020/10/29 Python
Django自带用户认证系统使用方法解析
2020/11/12 Python
Michael Kors英国官网:美国奢侈品品牌
2019/11/13 全球购物
家长寄语大全
2014/04/02 职场文书
教师新年寄语
2014/04/03 职场文书
离婚财产分配协议书
2014/10/21 职场文书
2014年全国法制宣传日宣传活动方案
2014/11/02 职场文书
故意伤害人身损害赔偿协议书
2014/11/19 职场文书
2014年路政工作总结
2014/12/10 职场文书
经费申请报告范文
2015/05/18 职场文书
暖春观后感
2015/06/08 职场文书
新郎父母婚礼致辞
2015/07/27 职场文书
pytorch中[..., 0]的用法说明
2021/05/20 Python
什么是css原子化,有什么用?
2022/04/24 HTML / CSS