• node express 使用中间件multer实现文件上传



    typora-copy-images-to: images
    typora-root-url: ./


    node express文件上传步骤说明

    • 自定义存储文件名称

    • 自定义路径

    1.创建项目

    安装 express

     1.应用生成器工具 express-generator 可以快速创建一个应用的骨架。

      $ npm install express-generator -g

    $ express --no-view myapp(此处创建不带模板引擎)

    ​ 2. 部署自动化刷新

    npm install --save-dev nodemon

    修改 package.json 的 scripts 内容:

    "scripts": {   
     "start": "node ./bin/www",   
     "dev": "nodemon ./bin/www" 
     }
    

    之后,使用

    npm run dev 运行

    2.前台页面

    修改默认模板

    <html>
    
    <head>
      <title>Express</title>
      <link rel="stylesheet" href="/stylesheets/style.css">
    
    </head>
    
    <body>
      <input type="file" class="file" name='file'>
      <a href="javascript:;" class="submit">提交</a>
    </body>
    <script>
      document.querySelector('.submit').addEventListener('click',function(){
          const files = document.querySelector('.file').files[0];
          console.log(files)
          let formdata = new FormData();
          formdata.append('file', files);
          fetch('/users/add',{
            method:'POST',
            body:formdata
          }).then((res)=>{
            console.log(res)
          }).catch((err)=>{
            console.log(err)
          })
      })
    </script>
    
    </html>
    
    

    3.后台接口书写

    安装中间件multer

    cnpm install multer --save-dev

    接口部署到user.js文件内

    接口访问/users/add

    user.js文件

    var express = require('express');
    var router = express.Router();
    const multer = require('multer');/* 图片上传 */
    const path=require("path");
    /* GET users listing. */
    router.get('/', function(req, res, next) {
      res.send('respond with a resource');
    });
    router.post('/add', uploadFile, function (req, res, next) {
      let src = req.body.file;
      res.json({'state':'success', 'result': src });
    });
    //自定义中间件
    function uploadFile(req,res,next){
    	//dest 值为文件存储的路径;single方法,表示上传单个文件,参数为表单数据对应的key
      // let upload = multer({ dest: "public/uploads" }).single("photo");
    
      //设置文件的名称
      let filename = "";
      //获取绝对路径
      let fullPath = path.resolve(__dirname,"../public/uploads");
      console.log(fullPath)
      let storage = multer.diskStorage({
        //设置存储路径
          destination:(req,file,cb)=>{
                console.log("destination:",file);
                // cb(null,fullPath);
                cb(null,'public/uploads');
          },
          //设置存储的文件名
          filename:(req,file,cb)=>{
              console.log("filename:",file);
              //获取文件的扩展名
              let extname=path.extname(file.originalname);
              filename=file.fieldname+"-"+Date.now()+extname;
              cb(null,filename);
          }
      })
      let upload = multer({ storage: storage }).single("file");
      /* single属性名需和上传的name一致否则报错:multererr:MulterError: */
    	upload(req,res,(err)=>{
        console.log(req.file);
        /* 文件存入 */
        if (err instanceof multer.MulterError) {
          res.send("multererr:" + err);
          console.log("multererr:" + err);
          return false;
        }else if(err){
          res.send("err:" + err);
          return false;
        }else{
          //上传成功后,将图片写在req.body.photo中,继续住下执行
            // req.body.photo=filename;
          req.body.photo = req.file;
          console.log({ 'filesuccess': req.file })
          next();
        }
    	})
    }
    module.exports = router;
    
    


  • 相关阅读:
    C#中IDisposable学习
    C# volatile与lock
    TFS源代码管理
    C#如何获取真实IP地址
    c# 协变和逆变
    基本数据类型
    用户交互
    变量.常量
    输出语句,注释,
    基础知识随笔
  • 原文地址:https://www.cnblogs.com/NB-JDzhou/p/13778341.html
Copyright © 2020-2023  润新知