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