nodejs文件上传就是这么简单
发布于 1 天前 作者 amor520 303 次浏览 最后一次编辑是 21 小时前 来自 分享

安装如下包:

npm install multer

npm insatll md5

package versions:

"multer": "^1.1.0",

"md5": "^2.1.0",

使用方法:

/**
 *
 * @Description 系统服务
 * @Author Amor
 * @Created 2016/04/27 15:27
 * 技术只是解决问题的选择,而不是解决问题的根本...
 * 我是Amor,为发骚而生!
 *
 */
var express = require('express');
var router = express.Router();
var upload = require('./fileupload');

//文件上传服务
router.post('/upload', upload.single('avatar'), function (req, res, next) {
    if (req.file) {
        res.send('文件上传成功')
        console.log(req.file);
        console.log(req.body);
    }
});

module.exports = router;

config.js

/**
 *
 * @Description 系统配置
 * @Author Amor
 * @Created 2016/04/26 11:48
 * 技术只是解决问题的选择,而不是解决问题的根本...
 * 我是Amor,为发骚而生!
 *
 */

module.exports = {
    upload: {
        path: process.cwd() + '/uploads'
    }
}

fileuploads.js

/**
 *
 * @Description 文件上传配置
 * @Author Amor
 * @Created 2016/04/27 17:50
 * 技术只是解决问题的选择,而不是解决问题的根本...
 * 我是Amor,为发骚而生!
 *
 */
var multer = require('multer');
var md5 = require('md5');
var config = require('./config')

var storage = multer.diskStorage({
    //设置上传文件路径,以后可以扩展成上传至七牛,文件服务器等等
    //Note:如果你传递的是一个函数,你负责创建文件夹,如果你传递的是一个字符串,multer会自动创建
    destination: config.upload.path,
    //TODO:文件区分目录存放
    //获取文件MD5,重命名,添加后缀,文件重复会直接覆盖
    filename: function (req, file, cb) {
        var fileFormat =(file.originalname).split(".");
        cb(null, file.fieldname + '-' + md5(file) + "." + fileFormat[fileFormat.length - 1]);
    }
});

//添加配置文件到muler对象。
var upload = multer({
    storage: storage,
    //其他设置请参考multer的limits
    //limits:{}
});
//导出对象
module.exports = upload;

表单:

<form id='editfile' method='post' action='/system/upload' enctype='multipart/form-data'>
    <input name="text" type="text"/>
    选择图片:<input name="avatar" id='upfile' type='file'/>
    <input type='submit' value='提交'/>
</form>

目前只是实现基本上传功能,还有许多待处理,比如错误处理、上传大小限制,图片压缩等等,如果需要,请自行扩展。 使用multer上传文件的时候记得去app.js注释如下代码:

//app.use(bodyParser.json());
//app.use(bodyParser.urlencoded({extended: false}));

代码地址:https://github.com/amor520/nodejs-file-upload-multer 博客地址:http://iloveamor.com/nodejs-file-upload-multer/ 转载请注明原地址,谢谢!

16 回复

学习了谢谢楼主

@yatokami 我也是刚学习,还碰到了文件夹创建的坑,所以记录了 destination: config.upload.path, Note:如果你传递的是一个函数,你负责创建文件夹,如果你传递的是一个字符串,multer会自动创建

创建文件夹果断使用mkdirp~

@DevinXian 我一开始也用的mkdirp,然而碰到了同步异步的问题,因为callback

@i5ting 大神终于来虐我了,哈哈,学习了 自豪地采用 CNodeJS ionic

@liygheart 嗯呢,我项目现在还不用,后续实现用于自己 自豪地采用 CNodeJS ionic

@i5ting 感谢大神分享,要知道有直接整合好七牛的,我博客里就不用扣nodeclub里的代码了。。

@amor520 异步就异步咯,解决方案还是很多的嘛- -

@i5ting 桑大把.vscode文件夹也搞上来了,哈哈,难不成是鼓励vscode咩

@DevinXian 我一直在用vscode啊,2016年的技术栈里推荐的也是vsc的

回到顶部