使用中间件multer管理上传文件
使用方法
//1 引入
let multer = require('multer');
//2 实例化
let objMulter = multer({ dest: './upload' }); //dest: 指定 保存位置(存到服务器)
//安装中间件,
app.use(objMulter.any()); //允许上传什么类型文件,any 代表任何类型
app.get('/reg',(req,res)=>{
req.files
})
req.files是一个数组,每一个上传的文件有如下描述
fieldname: 表单name名
originalname: 上传的文件名
encoding: 编码方式
mimetype: 文件类型
buffer: 文件本身
size:尺寸
destination: 保存路径
filename: 保存后的文件名 不含后缀
path: 保存磁盘路径+保存后的文件名 不含后缀
可以使用fs模块修改文件名
let oldname=req.files[i].path;
let newname=oldname+path.parse(req.files[i].originalname).ext;
fs.renameSync(oldname,newname);
path模块用来解析路径
path.parse('c:\wamp\xx.png') // string -> object
{
root: 'c:\', 盘符
dir: 'c:\wamp', 目录
base: 'xx.png', 文件名
ext: '.png', 扩展名
name: 'xx' 文件,不含扩展名
}
path.join('磁盘路径1','磁盘路径2','磁盘路径n')//合并片段
path.resolve('磁盘路径1','磁盘路径n') //合并磁盘片段,右到左找根,左到右拼接,没有找到根,以当前文件路径为根
__dirname 全局变量 返回当前文件所在的磁盘路径
let express=require('express'); let multer=require('multer') let app=express(); let fs=require('fs'); const path=require('path'); app.listen(7755,console.log("启动服务")); app.use(express.static('./public')) let objMulter=multer({dest:'./public/upload'}) app.use(objMulter.any()); // let str1='~public\upload\a37fc3aa270700ecbd858d8fc7485c02.png' // let str2='c:/sss/aa//d.ff' // let str3='' // console.log(path.parse(str1)); // console.log(path.parse(str2)); // console.log(path.join(str1,str2,str3)) // console.log(path.resolve(str2)) app.get('/api',(req,res,next)=>{ try { let urllist=[]; for(let i=0;i<req.files.length;i++){ let oldname=req.files[i].path; let newname=oldname+path.parse(req.files[i].originalname).ext; fs.renameSync(oldname,newname); let url="http://localhost:7755/upload/"+req.files[i].filename+path.parse(req.files[i].originalname).ext urllist.push(url); } res.send({err:0,url:urllist}) } catch (error) { console.log(error) } })