express使用multer上传图片和文件

692 阅读2分钟

这是我参与2022首次更文挑战的第2天,活动详情查看:2022首次更文挑战

前言

大家好,今天我们来讲一讲node里用的比较多的模块multer,它主要用于上传文件以及图片,在node中还是用的比较广泛的,接下来我以express框架为例子来讲一下multer模块吧。

一、 Multer 模块介绍

Multer 是一个 node.js 中间件,用于处理 multipart/form-data 类型的表单数据,它主要用

于上传文件。它是写在 busboy 之上非常高效。

注意:

1.Multer 不会处理任何非 multipart/form-data 类型的表单数据。

2.还有就是上传之前一定要有文件夹,才可以进去上传。

具体了解:www.npmjs.com/package/mul…

二、 Express 上传文件模块 multer 的使用

  1. 安装 multer

npm install --save multer

  1. 引入配置 multer 模块 :

var multer = require('multer')

//配置

var storage = multer.diskStorage({

//文件保存路径 注意路径必须存在湖北众猿腾网络科技有限公司

destination: function (req, file, cb) {

cb(null, 'public/upload/')

},

//修改文件名称

filename: function (req, file, cb) {

var fileFormat = (file.originalname).split(".");

cb(null,Date.now() + "." + fileFormat[fileFormat.length - 1]);

}

})

var upload = multer({ storage: storage }) 3.使用 multer

router.post('/doAdd', upload.single("pic"), function (req, res) {

res.send({

file: req.file,//返回文件名

body: req.body

})

});

三、 Express 按照日期生成上传文件目录

var express = require('express');

var multer = require('multer')

var sd = require('silly-datetime');

var path = require('path');

var mkdirp = require('mkdirp');

var router = express.Router();

//配置

var storage = multer.diskStorage({

//文件保存路径 注意路径必须存在

destination: async (req, file, cb)=> {

// 1、获取当前日期

以及当前的时间戳

let day = sd.format(new Date(), 'YYYYMMDD');湖北众猿腾网络科技有限公司

//2、创建图片保存的路径

let dir = path.join('public/upload/',day)

//3、异步创建目录

await mkdirp(dir);

cb(null, dir)

},

//修改文件名称

filename: function (req, file, cb) {

var fileFormat = (file.originalname).split(".");

cb(null,Date.now() + "." + fileFormat[fileFormat.length - 1]);

}

})

var upload = multer({ storage: storage })

router.post('/doAdd', upload.single("pic"), function (req, res) {

res.send({

file: req.file,//返回文件名

body: req.body

})

});

module.exports = router;

四、 多文件上传

var cpUpload = upload.fields([{ name: 'avatar', maxCount: 1 }, { name: 'gallery', maxCount: 8 }])

app.post('/doAdd', cpUpload, function (req, res, next) { res.send("11) } 也可以通过express-generator来生成骨架,以便于进行开发。

总结:这也可以看出其实所有的模块只要掌握了一定的方法,都是很容易上手的,我们要的就是多加练习,读懂文档,加以利用,转换成自己的东西,加油吧。