node.js系列(實例):原生node.js+formidable模塊實現簡單的文件上傳

 1 /**
 2  * 原生node.js結合formidable模塊實現圖片上傳更名
 3  * @Author:Ghost
 4  * @Date:2016/07/15
 5  * @description:
 6  * 一、引入模塊http、formidable、fs、silly-datetime、path
 7  * 二、建立http服務器
 8  * 三、實例化formidable對象並調用IncomingForm()方法
 9  * 四、調用uploadDir屬性設置文件上傳路徑
10  * 五、調用formidable parse()方法對錶單進行解析
11  * 六、調用fs的rename()方法對上傳的文件進行重命名
12  * 七、結束程序
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 });
相關文章
相關標籤/搜索