zoukankan      html  css  js  c++  java
  • node.js 通过post上传图片并显示

    首先编写最底层的请求处理程序requestHandler.js,首先要通过npm在项目所在的目录安装formidable,通过语句:npm install formidable安装,然后代码如下:

    var querystring = require("querystring");
    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");
    // response.writeHead(200,{"Content-Type":"text/html"});
    // response.write("You have sent the text :"+querystring.parse(postData).text);
    // response.end();
    var form = new formidable.IncomingForm();
    form.uploadDir = "e:/node_test/images/tmp";
    console.log("about to parse");
    form.parse(request,function(error,fields,files){
    console.log("parsing done.");
    try{
    fs.renameSync(files.upload.path, "e:/node_test/images/test.png");
    }catch(e){
    console.log(e);
    }
    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("e:/node_test/images/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;

    然后第二步骤,编写路由程序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;

    接着第三部,编写服务器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;
    // console.log("Request for "+pathname+" received.");

    // request.setEncoding("utf8");

    // request.addListener("data",function(postDataChunk){
    // postData += postDataChunk;
    // console.log("Received POST data chunk '"+postDataChunk+"'.");
    // });
    // request.addListener("end",function(){
    // route(handle,pathname,response,postData);
    // });
    var pathname = url.parse(request.url).pathname;
    console.log("Request for "+pathname+" received.");
    route(handle,pathname,response,request);
    }

    http.createServer(onRequest).listen(8899);
    console.log("Server has started.");
    }
    exports.start = start;

    然后,编写入口文件index.js,并引入路由、服务器、请求处理程序,代码如下:

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

    最后在控制台重启服务器,然后在浏览器刷入http://网址:端口号访问。

  • 相关阅读:
    vm选项大全
    the.book.of.gimp.pdf文字不显示
    我为什么在这里随笔记下这些,因为这些东西经常反复的忘记,有时候就连为什么要在这里随便都忘了,所以也把它随笔记下来。
    emacs search, 讲的很清楚。
    请教问题时,经常不会说的一些英语,
    dpkg -P xx
    sources.list修改后安装报错
    RDD、DataFrame和DataSet比较
    Cloud foundry基础
    Cloudify基本介绍
  • 原文地址:https://www.cnblogs.com/JulianJiang/p/3781980.html
Copyright © 2011-2022 走看看