通常我们开发项目的时候都要用到图片,那么nodejs是如何读取图片的呢?

我们来看一下,因为一个网页中图片的数量是不确定的,而我们不能每一张图片都去写它的src路径,这时候最好的方法就是写一个专门读取图片的路由,通过路由加载图片,这样既快捷又方便我们的理解。

文件目录:



我要加载的图片在index页面



注:问号?前面部分表示路由,问号后面才是图片的路径(相对于服务器文件),我的是first_server.js文件

1、在自己定义的目录下新建服务器文件

我的是:

first_server.js

var http=require('http');
var url=require('url');
var router=require('./module/router');
http.createServer(function (request,response) {
response.writeHead(200, {'Content-Type': 'text/html;charset=utf-8'});
if (request.url!=='/favicon.ico'){//清除二次访问
var path=url.parse(request.url).pathname;//获取当前路径
if(path==='/')path='/index';
path=path.substr(1);//获取去掉根符号‘/’的当前路径
router[path](request,response);//路由,path是一个变量,如login、register、index
}
}).listen(5200);//端口号为5200

解释:两次path的值不一样,



if(path==='/')path='/index'的作用是如果访问的时候没有输入路径,则默认进入index页面



: router[path]必须是在路由模块里面定义过的才行,不然会出现找不到报错



2、编写路由模块(router.js)

var url = require('url');
var optfile=require('./optfile');//导入自定义模块要加路径'./'
module.exports={
readImg:function(req,res){
optfile.readImg(req,res);
},
index:function(req,res){
optfile.index('./file/index.html',res);
}
}

3、编写操作文件(optfile.js)

var fs = require('fs');
function recall(res,data,ext){
if (!ext)ext='html';//默认输出格式为HTML
res.writeHead(200, {'Content-Type': 'text/'+ext+';charset=utf-8'});
res.end(data);//向浏览器输出取得的数据
}
module.exports={
readImg:function (req,res) {
var path=req.url.split('?')[1];
var data = fs.readFile(path,'binary',function (err,data) {
if (!err){
res.writeHead(200, {'Content-Type': 'image/jpeg'});//输出类型
res.write(data,'binary');//二进制方式
}else {
res.end('err');
}
})
},
index:function (path,res) {
var data = fs.readFile(path,function (err,data) {
if (!err){
data=data.toString();
recall(res,data);
}else {
res.end('err');
}
})
}
};

因为图片在nodejs中是以二进制的形式传输的,所以文件输出要加‘binnary’表示二进制输出.

req.url相当于request.url表示取得当前请求的路径,这里表示图片的全部路径,

req.url.split('?')表示将取得的路径字符串用?拆分成数组,

req.url.split('?')[1]表示取字符串的?号后面部分,即图片的相对路径

不明白的可以看下面,我console一下:





运行结果:

node学习(2)-路由读取图片的更多相关文章

  1. 【学习笔记】tensorflow图片读取

    目录 图像基本概念 图像基本操作 图像基本操作API 图像读取API 狗图片读取 CIFAR-10二进制数据读取 TFRecords TFRecords存储 TFRecords读取方法 图像基本概念 ...

  2. opencv学习之路(3)、批量读取图片、视频分解、视频合成

    一.批量有序读取图片 #include<opencv2/opencv.hpp> using namespace cv; void main() { //批量读取图片(有序) ]; ]; M ...

  3. Node学习(二) --使用http和fs模块实现一个简单的服务器

    1.创建一个www目录,存储静态文件1.html.1.jpg. * html文件内容如下: 12345678910111213 <html lang="en">< ...

  4. nodejs进阶(4)—读取图片到页面

    我们先实现从指定路径读取图片然后输出到页面的功能. 先准备一张图片imgs/dog.jpg. file.js里面继续添加readImg方法,在这里注意读写的时候都需要声明'binary'.(file. ...

  5. nodeJS基础08:读取图片

    1.读取图片 //server.js var http = require("http"); var readImage = require("./readImage&q ...

  6. C#(WinForm)上传图片保存到数据库和从数据库读取图片显示到窗体

    //浏览图片 private void btnUp_Click(object sender, EventArgs e) { OpenFileDialog ofd = new OpenFileDialo ...

  7. [python3.6+opencv] 01 完成读取图片操作

    学习一下opencv3 奈何vs2017配的云里雾里,还是使用python吧 --人生苦短,python来凑 --使用Pycharm操作,面向界面的Pycharm好一些吧(我猜的) 新建Project ...

  8. Node学习HTTP模块(HTTP 服务器与客户端)

    Node学习HTTP模块(HTTP 服务器与客户端) Node.js 标准库提供了 http 模块,其中封装了一个高效的 HTTP 服务器和一个简易的HTTP 客户端.http.Server 是一个基 ...

  9. opencv图像处理时使用stringstream批量读取图片,处理后并保存

    简介: 同文件输入输出流一样,使用stringstream可以批量读取图片,处理后并进行保存.因为C++中头文件 stringstream既可以从string读数据也可向string写数据,利于其这个 ...

随机推荐

  1. nginx语法之location详解

    Location语法优先级排列 匹配符 匹配规则 优先级 = 精确匹配 ^~ 以某个字符串开头 ~ 区分大小写的正则匹配 ~* 不区分大小写的正则匹配 !~ 区分大小写不匹配的正则 !~* 不区分大小 ...

  2. appium-andriod自动化实现注意项

    注意项: 1.appium需要全局安装,否则run test case 报错“appium not installed” 2.启动appium命令 node /Applications/Appium. ...

  3. 打开Vs2010时,卡在加载工具箱内容 不动了

    我是直接打开Visual Studio 2010,而不是以打开解决方案的方式打开.然后就在左下角显示“正在从包‘Microsoft.VisualStudio.IDE.ToolboxControlsIn ...

  4. POJ3450 Corporate Identity —— 后缀数组 最长公共子序列

    题目链接:https://vjudge.net/problem/POJ-3450 Corporate Identity Time Limit: 3000MS   Memory Limit: 65536 ...

  5. POJ3415 Common Substrings —— 后缀数组 + 单调栈 公共子串个数

    题目链接:https://vjudge.net/problem/POJ-3415 Common Substrings Time Limit: 5000MS   Memory Limit: 65536K ...

  6. 同级别中枢重叠后的走势分类---walkspeed

    同级别走势的中枢震荡有重叠,即意味当下级别走势类型是不能延续啦.走势级别开始升级.根据走势分解定理,可知走势能划分出至少三段当下级别的走势类型. 有三段同级别完成的走势类型,就必须有三个同级别的中枢. ...

  7. Ruby 仿 C 结构体:CStruct 的一些例子

    1. [代码]最简单的例子     # CStruct Examplesrequire 'cstruct' # example:# struct Point in C\C++        (32-b ...

  8. TP框架控制器和对应方法创建

    控制器和对应方法创建 控制器是MVC模式中的核心,TP默认有一个控制器:   Index控制器里面有一个操作方法:Index   我们在访问http://localhost:8080/Thinkphp ...

  9. Java_正则_00_资源贴

    二.参考资料 1.揭开正则表达式的神秘面纱

  10. MySQL11月16-11月21日活动赠送的优惠券使用率_20161124

    一.11.16到21号活动规则是 单笔订单最高的金额划分客户为399,799,1599元三档 达标的分别赠送对应的优惠券 优惠券ID有标号区间 THEN "1599档" ELSE ...