从零开始学习Node.js系列教程三:图片上传和显示方法示例


Posted in Javascript onApril 13, 2017

本文实例讲述了Node.js图片上传和显示方法。分享给大家供大家参考,具体如下:

index.js

var server = require("./server");
var router = require("./router");
var requestHandlers = require("./requestHandlers");
var handle = {}
handle["/"] = requestHandlers.start;
handle["/start"] = requestHandlers.start;
handle["/upload"] = requestHandlers.upload;
handle["/show"] = requestHandlers.show;
server.start(router.route, handle);

server.js

var http = require("http");
var url = require("url");
function start(route, handle) {
 function onRequest(request, response) {
  var pathname = url.parse(request.url).pathname;
  console.log("Request for " + pathname + " received.");
  route(handle, pathname, response, request);
 }
 http.createServer(onRequest).listen(3000);
 console.log("Server has started.");
}
exports.start = start;

requestHandlers.js

var querystring = require("querystring"),
  fs = require("fs"),
  formidable = require("formidable");
function start(response) {
  console.log("Request handler 'start' was called.");
  var body = '<html>'+
    '<head>'+
    '<meta http-equiv="Content-Type" content="text/html; '+
    'charset=UTF-8" />'+
    '</head>'+
    '<body>'+
    '<form action="/upload" enctype="multipart/form-data" '+
    'method="post">'+
    '<input type="file" name="upload" multiple="multiple">'+
    '<input type="submit" value="Upload file" />'+
    '</form>'+
    '</body>'+
    '</html>';
  response.writeHead(200, {"Content-Type": "text/html"});
  response.write(body);
  response.end();
}
function upload(response, request) {
  console.log("Request handler 'upload' was called.");
  var form = new formidable.IncomingForm();
  form.uploadDir = "D:\\min\\nodejsExample2\\tmp";
  console.log("about to parse1");
  form.parse(request, function(error, fields, files) {
    console.log("parsing done");
    console.log(files.upload.path);
    fs.renameSync(files.upload.path, "D:\\min\\nodejsExample2\\tmp\\test.png");
    response.writeHead(200, {"Content-Type": "text/html"});
    response.write("received image:<br/>");
    response.write("<img src='/show' />");
    response.end();
 });
}
function show(response) {
  console.log("Request handler 'show' was called.");
  fs.readFile("D:\\min\\nodejsExample2\\tmp\\test.png", "binary", function(error, file) {
    if(error) {
      response.writeHead(500, {"Content-Type": "text/plain"});
      response.write(error + "\n");
      response.end();
    } else {
      response.writeHead(200, {"Content-Type": "image/png"});
      response.write(file, "binary");
      response.end();
    }
  });
}
exports.start = start;
exports.upload = upload;
exports.show = show;

router.js

function route(handle, pathname, response, request) {
  console.log("About to route a request for " + pathname);
  if (typeof handle[pathname] === 'function') {
    handle[pathname](response, request);
  } else {
    console.log("No request handler found for " + pathname);
    response.writeHead(404, {"Content-Type": "text/html"});
    response.write("404 Not found");
    response.end();
  }
}
exports.route = route;

result:

从零开始学习Node.js系列教程三:图片上传和显示方法示例

从零开始学习Node.js系列教程三:图片上传和显示方法示例

从零开始学习Node.js系列教程三:图片上传和显示方法示例

知识点:

其中用到了fs模块的readFile读取文件,它有同步和异步两个版本。node.js中,并不是所有的API都提供了异步和同步版本,node.js不鼓励使用同步I/O。

//this is async 异步
/*
 fs.readFile调用时所做的工作只是将异步式I/O请求发送给了操作系统,然后立即返回并执行后面的语句,执行完以后进入事件循环监听事件。
 当fs接收到I/O请求完成的事件时,事件循环会主动调用回调函数以完成后续工作。
 */
var fs = require('fs');
fs.readFile('file.txt', 'utf-8', function(err, data){
  if (err){
    console.error(err);
  } else {
    console.log(data);
  }
});
//this is sync 同步
var fs = require('fs');
var data = fs.readFileSync('file.txt', 'utf-8');
console.log(data);
console.log('end.');

希望本文所述对大家nodejs程序设计有所帮助。

Javascript 相关文章推荐
javascript 通用简单的table选项卡实现
May 07 Javascript
JavaScript继承方式实例
Oct 29 Javascript
JS获取计算机mac地址以及IP的实现方法
Jan 08 Javascript
JS判断字符串长度的5个方法(区分中文和英文)
Mar 18 Javascript
使用jsonp完美解决跨域问题
Nov 27 Javascript
怎么通过onclick事件获取js函数返回值(代码少)
Jul 28 Javascript
jquery实现滑屏大图定时收缩为小banner图片的广告代码
Sep 02 Javascript
两种js监听滚轮事件的实现方法
May 13 Javascript
JavaScript实现获取用户单击body中所有A标签内容的方法
Jun 05 Javascript
基于JavaScript实现带数据验证和复选框的表单提交
Aug 23 Javascript
layUI实现前端分页和后端分页
Jul 27 Javascript
详解微信小程序之提高应用速度小技巧
Jan 07 Javascript
JS开发中百度地图+城市联动实现实时触发查询地址功能
Apr 13 #Javascript
从零开始学习Node.js系列教程二:文本提交与显示方法
Apr 13 #Javascript
从零开始学习Node.js系列教程一:http get和post用法分析
Apr 13 #Javascript
基于Vue实现tab栏切换内容不断实时刷新数据功能
Apr 13 #Javascript
JavaScript数据结构之二叉树的计数算法示例
Apr 13 #Javascript
JavaScript数据结构之二叉树的删除算法示例
Apr 13 #Javascript
JavaScript数据结构之二叉树的查找算法示例
Apr 13 #Javascript
You might like
Optimizer与Debugger兼容性问题的解决方法
2008/12/01 PHP
php字符串函数学习之strstr()
2015/03/27 PHP
PHP基于DOMDocument解析和生成xml的方法分析
2017/07/17 PHP
PHP迭代器和生成器用法实例分析
2019/09/28 PHP
jquery ajax实现下拉框三级无刷新联动,且保存保持选中值状态
2013/10/29 Javascript
js图片自动轮播代码分享(js图片轮播)
2014/05/06 Javascript
JavaScript Serializer序列化时间处理示例
2014/07/31 Javascript
JS简单实现动画弹出层效果
2015/05/05 Javascript
jQuery常用的一些技巧汇总
2016/03/26 Javascript
javascript动画之磁性吸附效果篇
2016/12/09 Javascript
关于JavaScript语句后面的分号问题
2017/12/07 Javascript
微信小程序使用audio组件播放音乐功能示例【附源码下载】
2017/12/08 Javascript
angularjs 缓存的使用详解
2018/03/19 Javascript
ES6使用export和import实现模块化的方法
2018/09/10 Javascript
使用pm2部署node生产环境的方法步骤
2019/03/09 Javascript
JavaScript实现捕获鼠标坐标
2020/04/12 Javascript
在Uni中使用Vue的EventBus总线机制操作
2020/07/31 Javascript
[38:51]2014 DOTA2国际邀请赛中国区预选赛 Orenda VS LGD-CDEC
2014/05/22 DOTA
在Python中封装GObject模块进行图形化程序编程的教程
2015/04/14 Python
python psutil库安装教程
2018/03/19 Python
Django forms组件的使用教程
2018/10/08 Python
python+selenium实现简历自动刷新的示例代码
2019/05/20 Python
python程序运行进程、使用时间、剩余时间显示功能的实现代码
2019/07/11 Python
Python 一键获取百度网盘提取码的方法
2019/08/01 Python
python不到50行代码完成了多张excel合并的实现示例
2020/05/28 Python
浅谈tensorflow中dataset.shuffle和dataset.batch dataset.repeat注意点
2020/06/08 Python
python判断一个变量是否已经设置的方法
2020/08/13 Python
python wsgiref源码解析
2021/02/06 Python
灵活运用CSS3特性绘制简易版围棋效果
2016/09/28 HTML / CSS
PAUL HEWITT手表美国站:德国北部时尚生活配饰品牌,船锚元素
2017/11/18 全球购物
新员工入职感言
2014/02/01 职场文书
大家访活动实施方案
2014/03/10 职场文书
2014年科研工作总结
2014/12/03 职场文书
离婚案件原告代理词
2015/05/23 职场文书
2016年区委书记抓基层党建工作公开承诺书
2016/03/25 职场文书
MySQL创建管理子分区
2022/04/13 MySQL