http方式
var multiparty = require('multiparty'); var http = require('http'); var util = require('util'); var fs = require("fs"); http.createServer(function(req, res) { if (req.url === '/upload' && req.method === 'POST') { // 解析一个文件上传 var form = new multiparty.Form(); //设置编辑 form.encoding = 'utf-8'; //设置文件存储路径 form.uploadDir = "uploads/images/"; //设置单文件大小限制 form.maxFilesSize = 2 * 1024 * 1024; //form.maxFields = 1000; 设置所以文件的大小总和 form.parse(req, function(err, fields, files) { var fileOne = files.upload[0] /*console.log(files); console.log(fileOne.originalFilename); console.log(fileOne.path);*/ //同步重命名文件名 //fs.renameSync(fileOne.path,form.uploadDir + fileOne.originalFilename); res.writeHead(200, {'content-type': 'text/plain'}); res.write('received upload:\n\n'); res.end(util.inspect({fields: fields, files: files})); }); return; } // show a file upload form res.writeHead(200, {'content-type': 'text/html'}); res.end( '<form action="/upload" enctype="multipart/form-data" method="post">'+ '<input type="text" name="title"><br>'+ '<input type="file" name="upload" multiple="multiple"><br>'+ '<input type="submit" value="Upload">'+ '</form>' ); }).listen(8080);
express方式
var multiparty = require('multiparty'); var http = require('http'); var util = require('util'); var fs = require("fs"); var express = require('express') var path = require('path') var app = express() app.use('/qushan/', express.static(path.join(__dirname, 'uploads'))) var server = app.listen(3002, function(){ console.log('server is listening...') }) app.get('/qushan',function(req,res){ res.send( '<form id="myForm" action="/qushan/upload" enctype="multipart/form-data" method="post">'+ '<input type="text" name="title"><br>'+ '<input type="file" name="upload" multiple="multiple" οnchange="ajaxUpload()"><br>'+ '<div id="uploadImg"><img src=""></div>'+ '<a οnclick="ajaxUpload()">ajax</a>'+ '<input type="submit" value="Upload">'+ '</form>'+ '<script src="/qushan/images/jquery.min.js"></script>'+ '<script>'+ 'function ajaxUpload(){'+ '$.ajax({'+ ' url: "http://www.likefun.cn/qushan/upload",'+ ' type: "POST",'+ ' data: new FormData($("#myForm")[0]),'+ ' processData: false,'+ ' contentType: false,'+ ' success:function(responseStr){'+ ' console.log(responseStr.newPath);'+ ' $("#uploadImg img").attr("src",responseStr.newPath)'+ ' }'+ '})'+ '}'+ '</script>' ) }) app.post('/qushan/upload',function(req,res){ var form = new multiparty.Form(); form.encoding = 'utf-8'; form.uploadDir = "uploads/images/"; form.maxFilesSize = 2 * 1024 * 1024; form.parse(req, function(err, fields, files) { var fileOne = files.upload[0] console.log(fileOne) var imgUrl = '/qushan/' + fileOne.path.substring(8) res.json({"newPath":imgUrl}) }); return })
formidable用法参考https://segmentfault.com/a/1190000005706031