文件结构:

index.js

  1. var server = require('./server.js');
  2. var router = require('./router.js');
  3. var requestHandlers = require("./requestHandlers");
  4.  
  5. var handle = {}
  6. handle["/"] = requestHandlers.start;
  7. handle["/start"] = requestHandlers.start;
  8. handle["/upload"] = requestHandlers.upload;
  9. handle["/show"] = requestHandlers.show;
  10.  
  11. server.start(router.route,handle);

server.js

  1. var http = require("http");
  2. var url = require("url");
  3.  
  4. function start(route,handle){
  5. function onRequest(request,response){
  6. var postData = "";
  7. var pathname = url.parse(request.url).pathname;
  8.  
  9. // request.setEncoding("utf8");
  10.  
  11. // request.addListener("data", function(postDataChunk) {
  12. // postData += postDataChunk;
  13. // console.log("Received POST data chunk '"+
  14. // postDataChunk + "'.");
  15. // });
  16.  
  17. // request.addListener("end", function() {
  18. // route(pathname,handle, response, postData);
  19. // });
  20.  
  21. route(pathname,handle, response, request);
  22. }
  23. http.createServer(onRequest).listen(8888);
  24. }
  25. exports.start=start;

router.js

  1. function route(pathname,handle,response,request) {
  2. var handler = handle[pathname];
  3. console.log(handler);
  4. if(typeof handler == "function"){
  5. handler(response,request);
  6. }else{
  7. console.log("No request handler found for " + pathname);
  8. response.writeHead(404, {"Content-Type": "text/plain"});
  9. response.write("404 Not found");
  10. response.end();
  11. }
  12. }
  13.  
  14. exports.route=route;

requestHandlers.js

  1. var querystring = require("querystring"),
  2. fs = require("fs"),
  3. formidable = require("formidable");
  4.  
  5. function start(response,request) {
  6. console.log("Request handler 'start' was called.");
  7.  
  8. var body = '<html>'+
  9. '<head>'+
  10. '<meta http-equiv="Content-Type" '+
  11. 'content="text/html; charset=UTF-8" />'+
  12. '</head>'+
  13. '<body>'+
  14. '<form action="/upload" enctype="multipart/form-data" '+
  15. 'method="post">'+
  16. '<input type="file" name="upload">'+
  17. '<input type="submit" value="Upload file" />'+
  18. '</form>'+
  19. '</body>'+
  20. '</html>';
  21.  
  22. response.writeHead(200, {"Content-Type": "text/html"});
  23. response.write(body);
  24. response.end();
  25. }
  26.  
  27. function upload(response,request) {
  28. console.log("Request handler 'upload' was called.");
  29. // response.writeHead(200, {"Content-Type": "text/plain"});
  30. // response.write("You've sent: " + postData);
  31. // response.end();
  32. var form = new formidable.IncomingForm();
  33. form.uploadDir='tmp';
  34. console.log("about to parse");
  35. form.parse(request, function(error, fields, files) {
  36. console.log("parsing done");
  37. fs.renameSync(files.upload.path, "./tmp/test.png");
  38. response.writeHead(200, {"Content-Type": "text/html"});
  39. response.write("received image:<br/>");
  40. response.write("<img src='/show' />");
  41. response.end();
  42. });
  43. }
  44.  
  45. function show(response, request) {
  46. console.log("Request handler 'show' was called.");
  47. fs.readFile("./tmp/test.png", "binary", function(error, file) {
  48. if(error) {
  49. response.writeHead(500, {"Content-Type": "text/plain"});
  50. response.write(error + "\n");
  51. response.end();
  52. } else {
  53. response.writeHead(200, {"Content-Type": "image/png"});
  54. response.write(file, "binary");
  55. response.end();
  56. }
  57. });
  58. }
  59.  
  60. exports.start = start;
  61. exports.upload = upload;
  62. exports.show = show;

  本文中代码参考自http://www.nodebeginner.org/index-zh-cn.html#javascript-and-nodejs

【nodejs】文件上传demo实现的更多相关文章

  1. WebSite 文件上传Demo

    知识点: 1 <!--上传文件时:        1.必须使用Post方式来提交数据        2.必须设置表单的enctype属性        3.必须在表单中包含文件域.input t ...

  2. shutil模块和几种文件上传Demo

    一.shutil模块 1.介绍 shutil模块是对os中文件操作的补充.--移动 复制 打包 压缩 解压 2.基本使用 1. shutil.copyfileobj(文件1, 文件2, 长度) 将文件 ...

  3. 基于tornado的文件上传demo

    这里,web框架是tornado的4.0版本,文件上传组件,是用的bootstrap-fileinput. 这个小demo,是给合作伙伴提供的,模拟APP上摄像头拍照,上传给后台服务进行图像识别用,识 ...

  4. Spring文件上传Demo

    package com.smbea.controller; import java.io.File; import java.io.FileOutputStream; import java.io.I ...

  5. nodejs 文件上传服务端实现

    前段时间在做个人项目的时候,用到了nodejs服务端上传文件,现在回头把这个小结一下,作为记录. 本人上传文件时是基于express的multiparty,当然也可以使用connect-multipa ...

  6. java文件上传Demo

    说到文件上传我们要做到: 1.引入两个包:commons-fileupload-1.2.1.jar和commons-io-1.3.2.jar 2.将form改为上传文件模式:enctype=" ...

  7. springMVC+uploadify3.1 文件上传 demo

    uploadify3.1 api 可参考:(点击打开链接) 需要springmvc的jar包 1.upload.jsp(主要代码) <script type="text/javascr ...

  8. nodejs文件上传报错总结

    语法: fs.rename(oldPath,newPath,callback) 今天在使用formidable模块做图片上传处理的时候,fs.rename方法的报了一个这样的错:cross-devic ...

  9. 文件上传demo

    前端代码: <form action="upload.php" enctype="multipart/form-data" method="po ...

  10. nodejs文件上传组件multer使用

    多图上传,发送端: var express = require('express') var rp = require('request-promise') var fs = require(&quo ...

随机推荐

  1. python 基础_列表的其他操作 4

    一.查找某个元素在数组中出现的次数 ,count的运用 a = ['a','b','c','c','c','a'] print(a.count('c')) 二.把一个元素插入到另一个元素的末尾,ext ...

  2. hdu2222(ac自动机模板)

    #include<iostream> #include<cmath> #include<cstdio> #include<cstring> #inclu ...

  3. How to Start a Business in 10 Days

    With an executive staffing venture about to open, a business loan from the in-laws gnawing at her co ...

  4. Java技术----Java泛型详解

    1.为什么需要泛型 泛型在Java中有很重要的地位,网上很多文章罗列各种理论,不便于理解,本篇将立足于代码介绍.总结了关于泛型的知识.希望能给你带来一些帮助. 先看下面的代码: List list = ...

  5. 20155326《Java程序设计》实验一实验报告

    实验内容 1.使用JDK编译.运行简单的Java程序: 2.使用Eclipse 编辑.编译.运行.调试Java程序. 实验要求 1.没有Linux基础的同学建议先学习<Linux基础入门(新版) ...

  6. sudo执行脚本找不到环境变量和命令

    简介 变量 普通用户下,设置并export一个变量,然后利用sudo执行echo命令,能得到变量的值,但是如果把echo命令写入脚本,然后再sudo执行脚本,就找不到变量,未能获取到值,如题情况如下: ...

  7. poj 2449 Remmarguts' Date【第K短路】

    题目 题意:求 点s 到 点t 的 第 k 短 路的距离: 估价函数=当前值+当前位置到终点的距离 f(n)=g(n)+h(n);     g(n)表示g当前从s到p所走的路径的长度,      h( ...

  8. [FAILED]Marking disk "DATA02" as an ASM disk

    执行删除asm磁盘时报错! [root@rac1 grid]# /etc/init.d/oracleasm deletedisk DATA01 /dev/sdc1 Marking disk " ...

  9. ASP.NET Web API 框架研究 Controller创建 HttpController 类型解析 选择 创建

    上一篇介绍了HttpController的一些细节,接下来说下HttpController 类型解析.选择和创建.生产HttpController实例的生产线如下图: 一.涉及的类及源码分析 涉及的类 ...

  10. 查找对端mac地址

    1.ping对端mac: 2.arp命令查找: