zoukankan      html  css  js  c++  java
  • ☀【Node】处理文件上传

    Node入门 √
    http://www.nodebeginner.org/index-zh-cn.html

    Node.js中所用的fs.renameSync出错:Error: EXDEV, cross-device link not permitted √
    http://www.crifan.com/node_js_use_fs_renamesync_error_exdev_cross_device_link_not_permitted/

    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)

    server.js

    var http = require("http")
    var url = require("url")
    
    function start(route, handle) {
        function onRequest(request, response) {
            var pathname = url.parse(request.url).pathname
            console.log("Request for " + pathname + " received.")
            route(handle, pathname, response, request)
        }
    
        http.createServer(onRequest).listen(8888)
        console.log("Server has started.")
    }
    
    exports.start = start

    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

    requestHandlers.js

    var querystring = require("querystring")
    var fs = require("fs")
    var util = require('util')
    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" multiple="multiple">' +
                    '<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.")
    
        var form = new formidable.IncomingForm()
        console.log("about to parse")
        form.parse(request, function(error, fields, files) {
            console.log("parsing done")
            var readStream = fs.createReadStream(files.upload.path)
            var writeStream = fs.createWriteStream("/tmp/test.png")
    
            util.pump(readStream, writeStream, function() {
                fs.unlinkSync(files.upload.path)
            });
    
            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("/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
  • 相关阅读:
    网络协议
    窗口TOPMOST属性设置失败
    自绘之----对话框
    图书推荐
    MFC自绘之WM_ERASEBKGND
    批处理获取当前路径
    checkBox 自绘
    第四章:基于TCP套接字编程(三)
    第四章:基于TCP套接字编程(二)
    第四章:基于TCP套接字编程(一)
  • 原文地址:https://www.cnblogs.com/jzm17173/p/3367038.html
Copyright © 2011-2022 走看看