zoukankan      html  css  js  c++  java
  • 【nodejs】文件上传demo实现

    文件结构:

    index.js

    var server = require('./server.js');
    var router = require('./router.js');
    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 postData = "";
            var pathname = url.parse(request.url).pathname;
    
            // request.setEncoding("utf8");
    
      //       request.addListener("data", function(postDataChunk) {
      //             postData += postDataChunk;
      //             console.log("Received POST data chunk '"+
      //             postDataChunk + "'.");
      //           });
    
      //       request.addListener("end", function() {
      //             route(pathname,handle, response, postData);
      //       });
    
              route(pathname,handle, response, request);
        }
        http.createServer(onRequest).listen(8888);
    }
    exports.start=start;

    router.js

    function route(pathname,handle,response,request) {
        var handler = handle[pathname];
        console.log(handler);
        if(typeof handler == "function"){
            handler(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;

    requestHandlers.js

    var querystring = require("querystring"),
        fs = require("fs"),
        formidable = require("formidable");
    
    function start(response,request) {
         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.");
        // response.writeHead(200, {"Content-Type": "text/plain"});
        // response.write("You've sent: " + postData);
        // response.end();
        var form = new formidable.IncomingForm();
        form.uploadDir='tmp';
        console.log("about to parse");
        form.parse(request, function(error, fields, files) {
            console.log("parsing done");
            fs.renameSync(files.upload.path, "./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, request) {
      console.log("Request handler 'show' was called.");
      fs.readFile("./tmp/test.png", "binary", function(error, file) {
        if(error) {
          response.writeHead(500, {"Content-Type": "text/plain"});
          response.write(error + "
    ");
          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;

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

  • 相关阅读:
    oracle 3大范式 理解
    RobHess的SIFT代码解析之RANSAC
    RobHess的SIFT代码解析步骤四
    RobHess的SIFT代码解析步骤三
    RobHess的SIFT代码解析步骤二
    《我的十年图像生涯》—王郑耀(西安交通大学)
    图像卷积
    多尺度分析方法及表达方式
    图像处理中双线性插值
    程序面试题——C实现
  • 原文地址:https://www.cnblogs.com/shytong/p/5661508.html
Copyright © 2011-2022 走看看