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. KNN算法 - 数据挖掘算法(3)

    (2017-04-10 银河统计) KNN算法即K Nearest Neighbor算法.这个算法是机器学习里面一个比较经典的.相对比较容易理解的算法.其中的K表示最接近自己的K个数据样本.KNN算法 ...

  2. iOS项目之NSLog相关

    这算是在项目中最常用的命令了,方便程序员查看日志数据,便于程序调试.在开发中我们经常会进行一些设置,下面就来简单的说一说: 先来看看普通的NSLog: - (void)viewDidLoad { [s ...

  3. Docker Kubernetes YAML文件常用指令

    YAML文件常用指令 配置文件说明: 定义配置时,指定最新稳定版API(当前为v1). 配置文件应该存储在集群之外的版本控制仓库中.如果需要,可以快速回滚配置.重新创建和恢复. 应该使用YAML格式编 ...

  4. spool例子

    set head offset echo offset feed offset heads offset pages 50000SET NEWPAGE NONEcolumn yesterday new ...

  5. Windows server 2016安装Docker EE

    Windows server 2016安装Docker EE 下载 windows server 2016 180天评估版本. 地址:https://www.microsoft.com/en-us/e ...

  6. Qt: error: symbol(s) not found for architecture x86_64问题

    Mac上面报这个问题,结果是因为.h文件有函数没有实现.

  7. 5_bash

    bash及其特性:shell:外壳.用户直接接入计算机的时候所使用的外壳程序linux允许一个用户账户登录多次,而这多次登录的每一个打开的shell都是独立的互不相干的shell,它们是三个进程,每一 ...

  8. [原]jsbsim 自动驾驶c310ap文件改写

    <?xml version="1.0"?> <!-- Author: 南水之源 Date: 1 January 2019 Function: A-320 auto ...

  9. idea新建一个spring项目,图解

    废话不说直接按图操作 选择Web模块的Web功能,单击Finish,idea会在spring.io网址上下载功能模板,下载玩成之后就是一个完整的Spring Boot工程 Project locati ...

  10. vue-路由懒加载

    将import ... from..改为 const Foo = resolve => require(['./Foo.vue'], resolve)