zoukankan      html  css  js  c++  java
  • 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)
        }
        
    })
  • 相关阅读:
    三星t5拆解
    一条 SQL 引发的事故,同事直接被开除!!
    Git 不能提交空目录?我也是醉了!
    Redis 6.0.8 紧急发布,请尽快升级!
    String.format() 图文详解,写得非常好!
    为什么 Redis 要比 Memcached 更火?
    Lambda 表达式入门,这篇够了!
    天啊,为什么我的 Redis 变慢了。。
    写出一手烂代码的 19 条准则!
    Redis 面试一定要知道的 3 个 问题!
  • 原文地址:https://www.cnblogs.com/anin/p/13368778.html
Copyright © 2011-2022 走看看