node.js系列(实例):原生node.js+formidable模块实现简单的文件上传

 1 /**
 2  * 原生node.js结合formidable模块实现图片上传改名
 3  * @Author:Ghost
 4  * @Date:2016/07/15
 5  * @description:
 6  * 1、引入模块http、formidable、fs、silly-datetime、path
 7  * 2、创建http服务器
 8  * 3、实例化formidable对象并调用IncomingForm()方法
 9  * 4、调用uploadDir属性设置文件上传路径
10  * 5、调用formidable parse()方法对表单进行解析
11  * 6、调用fs的rename()方法对上传的文件进行重命名
12  * 7、结束程序
13  */
14 
15 //引入模块
16 var http = require('http');
17 var formidable = require('formidable');
18 var fs = require('fs');
19 var sd = require('silly-datetime');
20 var path = require('path');
21 var util = require('util');
22 //创建服务器
23 var server = http.createServer(function (req,res) {
24     //上传表单数据接收
25     if(req.url === '/upload_setname' && req.method.toLowerCase() === 'post')
26     {
27         //实例化formidable对象,然后调用该对象下的IncomingForm()方法
28         var form = formidable.IncomingForm();
29 
30         //调用form.uploadDir属性设置文件上传的路径
31         form.uploadDir = "./uploads";
32 
33         //调用form.parse()方法表单提交的所有数据,字段、文件等
34         form.parse(req,function (err, fields, files) {
35             //如果出错则终止程序并抛出错误
36             if(err)
37             {
38                 throw err;
39             };
40 
41             //调用fs模块进行文件改名的rename(oldpath,newpath,callback)方法改名,该方法接收三个参数
42             var oldpath = __dirname+'/'+files.upload.path;
43 
44             //新路径由三部分组成,时间戳、随机数、扩展名
45             var time = sd.format(new Date(),"YYYYMMDDHHmmss");
46             var random = parseInt(Math.random() * 89999 + 10000);
47             var extname = path.extname(files.upload.name);
48             var newpath = __dirname + "/uploads/" + time + random + extname;
49 
50             fs.rename(oldpath,newpath, function (err) {
51                 //如果出错则终止程序并抛出错误
52                 if(err)
53                 {
54                     throw Error("upload error");
55                 };
56                 //设置MIME类型
57                 res.writeHead(200,{"Content-Type":"text/html;charset=UTF-8"});
58 
59                 //打印检查信息
60                 res.end(util.inspect({fields: fields, files: files}));
61                 //响应结束,输出结果信息
62                 res.end("success");
63             });
64         });
65     };
66 });
67 //设置监听端口
68 server.listen(3000, "127.0.0.1", function () {
69     console.log("server is started listen port 3000");
70 });
技术交流群:821039247
原文地址:https://www.cnblogs.com/humaotegong/p/5673805.html