记Node上传之 multer

我们记忆究竟是什么?

人类的大脑由神经细胞组成,包括神经元和胶质细胞。 神经元会发出长长的突起, 像树枝一样的伸展开来,叫作树突; 另一些像长长的电缆伸到很远的地方叫作轴突。 这些突起与其他神经元的突起连在一起,组成了一个网络,就像一座城市一样, 这个网络越大,所掌握的知识也越多 。我们把这个网络就叫作 "神经回路"。 大脑每当学到新的知识就会有一个新的突触形成 ,随着不断地复习这些突触得到强化,变成长久记忆。 相反,如果学习之后没有再复习,那么刚形成的突触就会减弱甚至消失其实"新神经回路的形成"就是大脑记忆的过程。

multer本地存储文件

just do it now!! 💐

前端上传文件

前端会通过formdata的形式将文件传给后端

HTML 复制代码
  <form method='POST' action='http://127.0.0.1/upload/avatar' enctype='multiple/formdata'>
      <input type='file' name ='file'>
      <input type='submit' value='submit'>
  <form>

后端

解析后端传来的文件可以借助multer中间件来解决

安装准备

shell 复制代码
 npm i multer
 npm i express

coding

创建服务

js 复制代码
// app.js
  const express  = require('express');
  const http = require('http');
  
  const app = express();
  const config = {
      port:3008,
      root:process.cwd(),
      host:'http://127.0.0.1'
      }
  http.createServer(app).listen(config.port,function(){
      const {host,port} = config;
      console.log(`服务已启动,请访问${host}:${port} 端口${port}`)
  })
js 复制代码
 // app.js 添加路由
 
 //...
 app.post('/upload/:classify',function(req,res,next){
     res.send(200,{
          success:true,
          msg:'文件上传成功'
     })
 })
 //...

使用multer

有两个选项可用,destinationfilename。他们都是用来确定文件存储位置的函数。

js 复制代码
    //  app.js文件里继续增加代码
    
    //...
    const path = require('path')
    const multer = require('multer');
    // ...
    const storage = multer.diskStorage({
        destination:(req,file,cb)=>{
            // 磁盘存储位置
            
            const classify = req.params['classify'];
            const localDir= path.join(config.root,`./upload/${classify}`);
            // cb(this指向,存储位置文件夹)
            cb(null,localDir)
        },
        filename:(req,file,cb)=>{
            // 文件存储名称

            // 从file对象中拿到名称,再解析出 name(文件名)和 ext(扩展名)
            const {name,ext} = path.parse(file.originalname);
            //cb(this指向, 文件名称)
            cb(null,name+ext)
        }
    })

🥑 动态创建存储位置,在destination里面拼接处路径即可(不存在创建即可)

消费multer

multer(opts)

Key Description
dest or storage 在哪里存储文件
fileFilter 文件过滤器,控制哪些文件可以被接受
limits 限制上传的数据
preservePath 保存包含文件名的完整文件路径
js 复制代码
   //app.js
   
   // 消费multer
   
   const upload = multer({storage})
   
   // 改造我们的路由
    app.post('/upload/:classify',upload.single('file'),(req,res,next)=>{
        res.send(200,{
          success:true,
          msg:'文件上传成功'
        })
    })

过滤

js 复制代码
    function fileFilter (req, file, cb) {

      // 这个函数应该调用 `cb` 用boolean值来
      // 指示是否应接受该文件

      // 拒绝这个文件,使用`false`,像这样:
      cb(null, false)

      // 接受这个文件,使用`true`,像这样:
      cb(null, true)

      // 如果有问题,你可以总是这样发送一个错误:
      cb(new Error('I don\'t have a clue!'))

    }

错误处理机制

js 复制代码
const upload = multer({storage,fileFilter}).single('file');
app.post('/upload/:classify',function(req,res,next){
     upload((req,res,function(err){
          if(err instanceof multer.MulterError){
              console.log(err.message)
          }else if(err){
          // 其他错误
          }
          res.send(200,{
          success:true,
          msg:'文件上传成功'
          })
     }))
})

📢 如有错误请看multer文档

启发:

  1. 学过内容总忘记,写文章记录下吧😁
  2. multer的使用再次加深

引用文章

大脑学习的原理?--神经元的可塑性

multer/github

相关推荐
酷酷的威朗普4 分钟前
医院绩效考核系统
javascript·css·vue.js·typescript·node.js·echarts·html5
前端李易安12 小时前
Webpack 热更新(HMR)详解:原理与实现
前端·webpack·node.js
Ztiddler21 小时前
【npm设置代理-解决npm网络连接error network失败问题】
前端·后端·npm·node.js·vue
前端青山1 天前
webpack进阶(一)
前端·javascript·webpack·前端框架·node.js
老攀呀1 天前
安装多个nodejs版本(nvm)
node.js
佚名程序员1 天前
【Node.js】全面解析 Node.js 安全最佳实践:保护您的应用
安全·node.js
zxg_神说要有光2 天前
快速入门 AI:调用 AI 接口生成 React 组件
前端·javascript·node.js
佚名程序员2 天前
【Node.js】深入理解 V8 JavaScript 引擎
前端·javascript·node.js
赵闪闪1682 天前
Node.js 安装与开发环境配置全指南
node.js
前端与小赵2 天前
什么是Webpack,有什么特点
前端·webpack·node.js