本文實例講述了Node.js圖片上傳和顯示方法。分享給大家供大家參考,具體如下:
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(3000); console.log("Server has started.");}exports.start = start;requestHandlers.js
var querystring = require("querystring"), fs = require("fs"), 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(); form.uploadDir = "D://min//nodejsExample2//tmp"; console.log("about to parse1"); form.parse(request, function(error, fields, files) { console.log("parsing done"); console.log(files.upload.path); fs.renameSync(files.upload.path, "D://min//nodejsExample2//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) { console.log("Request handler 'show' was called."); fs.readFile("D://min//nodejsExample2//tmp//test.png", "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/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;result:



知識點:
其中用到了fs模塊的readFile讀取文件,它有同步和異步兩個版本。node.js中,并不是所有的API都提供了異步和同步版本,node.js不鼓勵使用同步I/O。
//this is async 異步/* fs.readFile調用時所做的工作只是將異步式I/O請求發送給了操作系統,然后立即返回并執行后面的語句,執行完以后進入事件循環監聽事件。 當fs接收到I/O請求完成的事件時,事件循環會主動調用回調函數以完成后續工作。 */var fs = require('fs');fs.readFile('file.txt', 'utf-8', function(err, data){ if (err){ console.error(err); } else { console.log(data); }});//this is sync 同步var fs = require('fs');var data = fs.readFileSync('file.txt', 'utf-8');console.log(data);console.log('end.');希望本文所述對大家nodejs程序設計有所幫助。
新聞熱點
疑難解答