1.代码:

1-1: 入口文件: 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);

1-2: 服务器文件: server.js

 var http = require("http");
var url = require("url"); function start(route, handle){
http.createServer(function(request, response) { // console.log(url.parse(request.url));
// console.log(url.parse(request.url).query);
var pathname = url.parse(request.url).pathname;
console.log('request for [' +pathname+ "] received."); //接收请求数据:
// var postData = "";
// request.setEncoding("utf8"); // request.on("data", function(chunk){
// postData += chunk;
// console.log("Received POST data chunk '" +chunk+"'");
// }); // request.on("end", function(){
// route(handle, pathname, response, postData);
// }); route(handle, pathname, response, request); }).listen(8888); console.log("server has started.");
} exports.start = start;

1-3: 路由文件: 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/plain"});
response.write("404 Not found");
response.end();
}
} exports.route = route;

1-4: 请求处理程序: requestHandles.js

 var querystring = require("querystring");
var url = require("url");
var fs = require("fs");
var 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">'+
'<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."); 33 var form = new formidable.IncomingForm();
console.log("about to parse");
35 form.parse(request, function(error, fields, files){
console.log("parsing done"); var uploadDir = "C:/Users/dc5yy/Desktop/upload/";
fs.renameSync(files.upload.path, uploadDir + files.upload.name); response.writeHead(200, {"Content-Type": "text/html"});
response.write("received image:<br />");
43 response.write("<img width='400px' src='/show?filename=" +files.upload.name+ "' />");
response.end(); }); } function show(response, request){
console.log("Request handle 'show' was called.");
var uploadDir = "C:/Users/dc5yy/Desktop/upload/";
54 var filename = uploadDir + url.parse(request.url, true).query.filename;
console.log(filename);
56 fs.readFile(filename, "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/jpg"});
response.write(file, "binary");
response.end();
}
});
} exports.start = start;
exports.upload = upload;
exports.show = show;

2. 运行:

2-1: 上传文件目录:

2-2: 开启服务器:

2-3: 上传图片:

选择一张图片:

结果:

查看 上传目录:

3.参考链接:

    node入门

   网盘下载: 提取密码:1wma

nodejs - 1)上传图片 ,并显示 , 2)模块 formidable的更多相关文章

  1. NodeJS学习笔记之Connect中间件模块(一)

    NodeJS学习笔记之Connect中间件模块(一) http://www.jb51.net/article/60430.htm NodeJS学习笔记之Connect中间件模块(二) http://w ...

  2. Nodejs学习笔记(三)--- 模块

    目录 简介及资料 自定义模块 创建一个自定义模块 调用自定义模块 exports和module.exports 区别 exports和module.exports 覆盖 其它... 简介及资料 通过N ...

  3. NodeJS笔记(二)- 修改模块默认保存路径

    参考:nodejs prefix(全局)和cache(缓存)windows下设置 假设nodejs根目录为“D:\nodejs” 如下所示,新建“node_cache”文件夹用来存放全局缓存 该路径下 ...

  4. Js实现input上传图片并显示缩略图

    用这个方法就可以很方便快捷的实现上传图片并显示缩略图的效果: FileReader 的 readAsDataURL() 先创建一个img标签,再用 fileReader 把input文件的赋值到img ...

  5. Nodejs学习笔记(三)—模块

    简介及资料 通过Node.js的官方API可以看到Node.js本身提供了很多核心模块 http://nodejs.org/api/ ,这些核心模块被编译成二进制文件,可以require('模块名') ...

  6. 【转】Nodejs学习笔记(二)--- 模块

    目录 简介及资料 自定义模块 创建一个自定义模块 调用自定义模块 exports和module.exports 区别 exports和module.exports 覆盖 其它... 简介及资料 通过N ...

  7. nodeJs学习-06 模块化、系统模块、自定义模块、express框架

    系统模块:http://nodejs.cn/api/events.html 自定义模块: require   请求:引入模块 module    模块:批量输出 exports   输出:单独输出   ...

  8. COS上传图片和显示图片

    写这篇文章之前,我也是刚刚实现COS上传和显示图片.我百度了好多相关文章,COS上传图片成功的文章不少,上传后显示图片的文章几乎没有.于是写一篇记录下. COS上传图片推荐链接:https://blo ...

  9. nodejs上传图片并显示的例子

    目标 1. 在浏览器地址栏输入“http://demos/start”,进入欢迎页面,页面有一个文件上传表单: 2. 选择一张图片并提交表单,文件被上传到"http://demos/uplo ...

随机推荐

  1. hdu5029 Relief grain

    题目链接 树剖+线段树 将区间修改转化为单点修改,因为如果按DFS序进行修改,那么一定会对DFS序更大的点造成影响 #include<iostream> #include<vecto ...

  2. SPOJ - AMR11E

    Arithmancy is Draco Malfoy's favorite subject, but what spoils it for him is that Hermione Granger i ...

  3. nginx-fastcgi 第九章

    CGI全称通用网关接口 Commmon Gateway Interface 用于HTTP服务上的程序服务通信交流的一种工具,CGI程序须运行在网络服务器上. 传统CGI接口方式性能较差,由于每次HTT ...

  4. ubuntu16.04安装wordpress

    ubuntu16.04安装wordpress和centos7安装wordpress存在一定的差异. 当然共性大于差异. 共性是lamp环境. wordpress的必备环境. 先共性再差异. 一.搭建l ...

  5. .NET 实用扩展方法

    .NET 实用扩展方法(持续更新...) 1. 字符串转换为可空数值类型(int, long, float...类似) /// <summary> /// 将字符串转换成32位整数,转换失 ...

  6. LINQ之路13:LINQ Operators之连接(Joining)

    Joining IEnumerable<TOuter>, IEnumerable<TInner>→IEnumerable<TResult> Operator 说明 ...

  7. Less、Sass和SCSS

    (一)区别: Less(可在客户端和服务端运行)是一种动态样式语言,对css赋予了动态语言的特性,如:变量.继承.运算.函数. SCSS为Sass的升级版本,兼容Sass功能,又新增功能.SCSS 需 ...

  8. Vue 兼容 IE9 全功能正常使用的全面解决方案

    https://blog.csdn.net/VhWfR2u02Q/article/details/80863626

  9. 自定义Cordova插件详解

    一.Cordova的基础点 在混合式应用中,我们通过现有的Cordova插件,可以轻松的在 H5 上调用手机native的功能.现有的Cordova插件能满足平时大部分的开发需求,然而,有时候找不到合 ...

  10. vue-update-表单形式复写方法上传图片

    handleSave() { const formData = new FormData(); /* eslint-disable */ for (let key in this.dataInfo) ...