前端之家收集整理的这篇文章主要介绍了
基于nodejs+express(4.x+)实现文件上传功能,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_301_0@Nodejs是一个年轻的编程框架,充满了活力和无限激情,一直都在保持着快速更新。基于Nodejs的官方Web开发库Express也在同步发展着,每年升级一个大版本,甚至对框架底层都做了大手术。在Express4时,替换掉中件间库connect,而改用多个更细粒度的库来取代。带来的好处是明显地,这些中间件能更自由的更新和发布,不会受到Express发布周期的影响;但问题也是很的棘手,不兼容于之前的版本,升级就意味着要修改代码。
@H_
301_0@通过一段时间的查阅资料、摸索,我发现实现
上传的方式有:1.express中间件multer模块(此效率最高,在express3.x原生
支持,到了express4.x独立成一个模块了),2.connect-multiparty模块(但现在 官方不推荐 ),3.使用multiparty模块实现(此
方法比较普遍),4.使用formidable
插件实现(
插件呢,就是简单易懂);
@H_
301_0@
最简单的做法是通过“connect-multiparty”中间件实现上传。
@H_
3010@通过在项目中npm install connect-multiparty进行安装。
@H301_0@
<div class="jb51code">
<pre class="brush:js;">
var multipart = require('connect-multiparty');
var multipartMiddleware = multipart();
app.post('/upload',multipartMiddleware,function(req,resp) {
console.log(req.body,req.files);
// don't forget to delete all req.files when done
});
_0@3.
_0@4.
上传
页面 */
router.get('/',res,next) {
res.render('index',{ title: 'Express' });
});
/*
上传*/
router.post('/file/uploading',next){
//
生成multiparty对象,并配置
上传目标路径
var form = new multiparty.Form({uploadDir: './public/files/'});
//
上传完成后处理
form.parse(req,function(err,fields,files) {
var filesTmp = JSON.stringify(files,null,);
if(err){
console.log('parse error: ' + err);
} else {
console.log('parse files: ' + filesTmp);
var inputFile = files.inputFile[];
var uploadedPath = inputFile.path;
var dstPath = './public/files/' + inputFile.originalFilename;
//
重命名为真实
文件名
fs.rename(uploadedPath,dstPath,function(err) {
if(err){
console.log('rename error: ' + err);
} else {
console.log('rename ok');
}
});
}
res.writeHead(,{'content-type': 'text/plain;charset=utf-'});
res.write('received upload:\n\n');
res.end(util.inspect({fields: fields,files: filesTmp}));
});
});
module.exports = router;