文章目录

  • 介绍
  • 使用(摘自官方解释)
    • multer(options)
    • storage(储存引擎)
      • .single(fieldname)
      • .none()
      • .fields(fields)
    • limits(限制)
    • 错误处理机制

介绍

Multer 是一个 node.js 中间件,用于处理 multipart/form-data 类型的表单数据,它主要用于上传文件。它是写在 busboy 之上非常高效。
注意: Multer 不会处理任何非 multipart/form-data 类型的表单数据

使用(摘自官方解释)

guthub官方解释链接
Multer在解析完请求体后,会向Request对象中添加一个body对象和一个file或files对象(上传多个文件时使用files对象 )。其中,body对象中包含所提交表单中的文本字段(如果有),而file(或files)对象中包含通过表单上传的文件。

const express = require('express')
const multer  = require('multer')
const app = express()const storage = multer.diskStorage({//保存路径destination: function (req, file, cb) {cb(null, '/tmp/my-uploads')//注意这里的文件路径,不是相对路径,直接填写从项目根路径开始写就行了},//保存在 destination 中的文件名filename: function (req, file, cb) {    cb(null, file.fieldname + '-' + Date.now())}
})
const upload = multer({ storage: storage })app.post('/profile', upload.single('avatar'), function (req, res, next) {// req.file 是 `avatar` 文件的信息// req.body 将具有文本域数据,如果存在的话
})
app.post('/photos/upload', upload.array('photos', 12), function (req, res, next) {// req.files 是 `photos` 文件数组的信息// req.body 将具有文本域数据,如果存在的话
})
const cpUpload = upload.fields([{ name: 'avatar', maxCount: 1 }, { name: 'gallery', maxCount: 8 }])
app.post('/cool-profile', cpUpload, function (req, res, next) {// req.files 是一个对象 (String -> Array) 键是文件名,值是文件数组// 例如://  req.files['avatar'][0] -> File//  req.files['gallery'] -> Array// req.body 将具有文本域数据,如果存在的话
})

multer(options)

Multer 接受一个 options 对象,其中最基本的是 dest 属性,这将告诉 Multer 将上传文件保存在哪。如果你省略 options 对象,这些文件将保存在内存中,永远不会写入磁盘。
通常,一般的网页应用,只需要设置 dest 属性,像这样:

const upload = multer({ dest: 'uploads/' })

如果你想在上传时进行更多的控制,你可以使用 storage 选项替代 dest。Multer 具有 DiskStorage 和 MemoryStorage 两个存储引擎; 另外还可以从第三方获得更多可用的引擎。

storage(储存引擎)

destination 是用来确定上传的文件应该存储在哪个文件夹中。也可以提供一个 string (例如 ‘/tmp/uploads’)。如果没有设置 destination,则使用操作系统默认的临时文件夹
注意: 如果你提供的 destination 是一个函数,你需要负责创建文件夹。当提供一个字符串,multer 将确保这个文件夹是你创建的。
filename 用于确定文件夹中的文件名的确定。 如果没有设置 filename,每个文件将设置为一个随机文件名,并且是没有扩展名的

.single(fieldname)

接受一个以 fieldname 命名的文件。这个文件的信息保存在 req.file

.none()

只接受文本域

.fields(fields)

接受指定 fields 的混合文件。这些文件的信息保存在 req.files。
fields 应该是一个对象数组,应该具有 name 和可选的 maxCount 属性。

limits(限制)

onFileUploadStart新的multerAPI 没有。如果要限制文件大小,则应添加limits: { fileSize: maxSize }到传递给的对象multer():

示例:

var upload = multer({storage: storage,limits: { fileSize: maxSize }
}).single('bestand');

错误处理机制

如果你想捕捉 multer 发出的错误,你可以自己调用中间件程序。如果你想捕捉 Multer 错误,你可以使用 multer 对象下的 MulterError 类 (即 err instanceof multer.MulterError)。

const multer = require('multer')
const upload = multer().single('avatar')app.post('/profile', function (req, res) {upload(req, res, function (err) {if (err instanceof multer.MulterError) {// 发生错误} else if (err) {// 发生错误}// 一切都好})
})

Multer详解(Node.js中间件)相关推荐

  1. 大咖说*图书分享-Node布道师狼叔|三卷书详解Node.js

    狼书系列图书以Node.js为主,讲解了Node.js的基础知识.开发调试方法.源码原理和应用场景等内容,旨在向读者展示如何通过新的Node.js和npm编写出更具前端特色.更具工程化优势的代码. 嘉 ...

  2. 详解Node.js开发中不可或缺的7个库

    在Node.js开发中,选择合适的库对于提高开发效率和优化应用程序性能至关重要.本文将介绍七个备受关注的Node.js库,它们在各自的领域中展现了出色的功能和性能.这些库分别是:Config.Fetc ...

  3. 万字长文--详解Node.js(快速入门)

    Node.js基础与扩展 Node.js 1.初识Node.js与内置模块 1.1 Node.js初识 1.2 fs文件系统模块 1.3 path路径模块 1.4 http模块 2.模块化 2.1 模 ...

  4. 详解Node.js API系列 Module模块(2) 案例分析

    API文档是枯燥的,下面本人收集了一些论坛经常有人疑问和开源代码中经常遇到的案例供大家研究一下. http://blog.whattoc.com/2013/09/11/nodejs_api_modul ...

  5. 详解Node.js包的工程目录与NPM包管理器的使用_node.js

    工程目录 以编写一个命令行程序为例,一般我们会同时提供命令行模式和 API 模式两种使用方式,并且我们会借助三方包来编写代码.除了代码外,一个完整的程序也应该有自己的文档和测试用例.因此,一个标准的工 ...

  6. nodeJs中间件Multer详解_使用express实现本地文件/图片上传到服务器指定目录

    最终实现的效果,更改Input的值后,将图片显示出来.输入描述信息,提交后,图片上传到后台对应的路径下. Multer Multer 是一个node.js中间件,用于处理 multipart/form ...

  7. cpu多核 node 单线程_详解node单线程实现高并发原理与node异步I/O

    一.node单线程实现高并发原理 众所周知nodejs是单线程且支持高并发的脚本语言.可为什么单线程的nodejs可以支持高并发呢?很多人都不明白其原理,下面我来谈谈我的理解: 1. node的优点: ...

  8. php滚动窗口多条动态,详解原生JS是实现控制多个滚动条同步跟随滚动

    本文主要和大家详解详解原生JS是实现控制多个滚动条同步跟随滚动,当这两个容器元素的内容都超出了容器高度,即都出现了滚动框的时候,如何在其中一个容器元素滚动时,让另外一个元素也随之滚动. 在一些支持用 ...

  9. layui日期与vue_详解Vue.js和layui日期控件冲突问题解决办法

    详解Vue.js和layui日期控件冲突问题解决办法 发布于 2020-8-10| 复制链接 摘记: 事故还原: 今天在用layui的日期控件的时候发现一个问题,就是form表单中的日期选择之后,如果 ...

最新文章

  1. 树莓派:人在太空,刚下火箭,诚招小于19岁的代码开发者
  2. C++调用Python
  3. Frost Sullivan权威报告:阿里云再次领跑云WAF大中华区市场
  4. 几何着色器与细分(镶嵌)着色器
  5. 批量查询,mget语法,mget批量查询(来自学习资料,第26节)
  6. Module(模块)
  7. (2) websocket 实现群聊
  8. swift使用mysql教程,Swift学习教程之SQLite的基础使用
  9. java文字旋转90度_菜鸟求助:在 JAVA APPLET 里如何旋转 90 度显示一个字符?
  10. 1个显示器分割2画面_1把花生2个鸡蛋,做个小零食,1口1个特别香,做法还简单!...
  11. 一些知名的J2me优秀开源UI项目
  12. 解决从PDF复制出来的文字总是换行的小技巧
  13. 浅谈利用javascript实现gb2312编码。
  14. ## Myql的常见命令及语法规范
  15. 中国移动国际iSolutions:中国首张覆盖全球的云网络
  16. 管理kde wallet
  17. PacketTracer Physical view wireless single problem
  18. 用指定的用户名和密码无法登录到该FTP服务器
  19. idea永久激活使用
  20. c语言见缝插针小游戏,Unity实现见缝插针小游戏

热门文章

  1. 推荐一款图片编辑download的js插件
  2. 服务器连接电脑显示屏花屏怎么解决,电脑无辜花屏怎么办 电脑花屏原因以及解决办法...
  3. php邮件服务器搭建,邮件服务器怎么搭建?
  4. linux显示目录层次,linux文件层级、目录、文件基本操作介绍
  5. 【交通标志识别】Hog+SVM路标检测与识别【含Matlab源码 1715期】
  6. PyTorch参数初始化和Finetune
  7. 如何压缩zip格式的文件
  8. wsock32 linux,在linux下安装并使用websocket
  9. sigmoid函数,tanh函数,relu函数,softmax函数
  10. python云计算好学吗_云计算发展前景好不好 学了后能胜任哪些岗位