记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

相关推荐
谢尔登5 小时前
【Node.js】worker_threads 多线程
node.js
osnet9 小时前
showdoc二次开发
node.js·vue
泯泷9 小时前
「生产必看」在企业环境中正确使用 Node.js 的九大原则
前端·后端·node.js
太阳火神的美丽人生11 小时前
Vant WeApp 开启 NPM 遇到的问题总结
前端·npm·node.js
qingshun1 天前
Node 系列之预热知识(1)
node.js
余生H1 天前
前端的全栈混合之路Meteor篇:RPC方法注册及调用
前端·rpc·node.js·全栈
前端 贾公子1 天前
Node.js env 环境变量多种配置方式
node.js
sooRiverling1 天前
VUE 开发——Node.js学习(一)
vue.js·学习·node.js
_清豆°1 天前
NodeJS下载、安装及环境配置教程,内容详实
javascript·node.js
不惑_2 天前
最佳ThreeJS实践 · 实现赛博朋克风格的三维图像气泡效果
javascript·node.js·webgl