定制软件Multer详解(Node.js中间件)

文章目录

介绍

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

使用(定制软件摘自官方解释)


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 将具有文本域数据,如果存在的话})
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

multer(options)

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

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

如果你想在上传时进行更多的控制,你可以使用 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');
  • 1
  • 2
  • 3
  • 4

错误处理机制

如果你想捕捉 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) {      // 发生错误    }    // 一切都好  })})
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发