nodejs 之express 文件上传

      使用中间件multer管理上传文件multer 接受 form-data编码数据,所有要求前端携带时注意一下,如:<input type=file enctype="multipart/form-data" name="fieldname",上传保存的文件名随机并且没有扩展名。

使用方法 

  //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)
    }
    
})
原文地址:https://www.cnblogs.com/anin/p/13368778.html