nodejs 初步使用以及实现文件上传的功能

来源:互联网 发布:软件项目实施方案范文 编辑:程序博客网 时间:2024/05/16 12:42

这个例子是引用了《nodejs入门》中的文件上传的例子,

相应的原理就不讲解了,可以查看上面所说的那本书,这里自会贴出相关的代码和注意点:


首先是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;


在者是有关这些服务器获取请求数据的处理模块: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();console.log( form.uploadDir );form.uploadDir= "./";  //这一句话是很必要的,就是设置到当前的文件console.log("about to parse");form.parse(request, function(error, fields, files) {console.log("parsing done"+files.upload.path );fs.renameSync(files.upload.path,"./test.png");
<span style="white-space:pre"></span>//很多资料中都是有/tmp/test.png 那是因为一般的都是在c盘,若是没有就会显示错误。我们这样就直接当前的目录存储。console.log(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.");try{fs.readFile("./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();}});}catch(e){console.log(e);}}exports.start = start;exports.upload = upload;exports.show = show;
上面包括了请求的方法、上传的方法 和 展示的方法


下面是要给它们进行配置路由:就是实现服务器和数据处理模块之间的逻辑关系,代码如下:

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;
路由其实就是配置请求的过程路径,其实就是相当于Java EE中的Struts中的action配置文件,不同的请求配置不同的动作。



最后就是配置路劲是怎么样的,这个就是和router有对应的关系从而出发不同的动作。

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)


这些代码执行的时候需要相应的框架:formidable

在dos中(安装了npm的环境的情况下)执行命令:npm install formidable 在工程文件下安装这个框架。

像以前那样执行就可以了。











0 0