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)
        }
        
    })
  • 相关阅读:
    Java实现 蓝桥杯VIP 算法提高 阮小二买彩票
    Java实现 蓝桥杯VIP 算法提高 传染病控制
    Java实现 蓝桥杯VIP 算法提高 传染病控制
    Java实现 蓝桥杯VIP 算法提高 传染病控制
    Java实现 蓝桥杯VIP 算法提高 传染病控制
    Java实现 蓝桥杯VIP 算法提高 传染病控制
    Java实现 蓝桥杯VIP 算法提高 企业奖金发放
    Java实现 蓝桥杯VIP 算法提高 企业奖金发放
    让程序后台隐藏运行
    只要你喜欢,并且可以养家糊口,就是好的
  • 原文地址:https://www.cnblogs.com/anin/p/13368778.html
Copyright © 2011-2022 走看看