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 });