nodejs的request没有内置分析并整理post上传的数据与文件的的方法,打开的是带有分隔标志的原始数据串,需要额外提取。
虽然我们可以通过自己写代码,从header里面获取分隔标志,再切割原始数据进行提取,但这样显得很不优雅。并且已经有非常专业的插件formidable可以干这个活。下面就贴出用该插件提取文件与数据的基本代码:
var fs = require('fs');
var formdata = require('formidable');
function onRequest(request, response) {
var form = new formdata.IncomingForm();
form.uploadDir = config.filePath;//指定保存文件的路径,formidable会自动保存文件
request.files = {};
request.data = {};
form.on('field', function (name, value) {
request.data[name] = value;//这里提取的是键值对数据
}).on('file', function (name, file) {
request.files[name] = file;//这里提取上传的文件
}).on('end', function () {
request.startTime = new Date();
//默认保存的文件名是随机串,需要自己重新指定文件名和后缀
for (var k in request.files) {
var f = request.files[k];
var n = request.startTime.format('yyyyMMddHHmmss') + '_' + f.name;
fs.renameSync(f.path, site.config.filePath + "/" + n);
}
});
form.parse(request);
}
//启动服务
http.createServer(onRequest).listen(8080);
formidable这个小插件功能还是很强大的,还支持进度条反馈,有兴趣的同学可以自行研究