📜  multer() - Javascript (1)

📅  最后修改于: 2023-12-03 15:33:00.476000             🧑  作者: Mango

Multer()-一个用于处理Node.js中文件上传的中间件

Multer()是Node.js中最受欢迎的文件上传中间件之一。它可以在后端轻松处理文件的上传和存储。

Multer()可以处理以下内容:

  • 内存中的文件
  • 单文件上传
  • 多文件上传
  • 指定上传文件的类型和大小
  • 自定义文件上传的路径和文件名
  • 限制文件上传的数量

Multer()是一种非常易于使用和快速的中间件,可以轻松地上传文件。最主要的优点之一是其底层的Stream API,使得处理文件上传变得更加高效。

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

app.post('/profile', upload.single('avatar'), function (req, res, next) {
  // req.file 是 `avatar` 文件的信息
  // req.body 将具有文本域数据,如果存在的话
})
安装Multer()

在安装Multer()之前,你需要先安装Node.js和NPM。随后,你可以通过运行以下命令来安装Multer():

npm install multer
如何使用Multer()

要使用Multer()来处理文件上传,你需要先实例化Multer()并配置选项。然后你可以通过调用中间件函数,将它添加到Express应用程序中。最后,你还需要在路由处理程序中找到上传的文件,将它保存在服务器上,并返回响应。

实例化Multer()

你可以使用multer()函数实例化Multer()。这个函数接收一个对象,该对象定义了选项:

  • dest - 规定了上传文件的存储位置。
  • fileFilter - 规定了上传文件的格式和类型。
  • limits - 规定了上传文件的最大大小。

举个例子,下面的代码定义了一个存储所有上传文件的uploads目录,并限制了上传文件的大小为1MB:

const multer  = require('multer')

const upload = multer({
  dest: 'uploads/',
  limits: {
    fileSize: 1000000 // bytes
  }
})

在Express App中添加Multer()

你需要将Multer()作为中间件添加到Express应用程序中。

const express = require('express')
const multer  = require('multer')
const app = express()

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

app.post('/upload', upload.single('photo'), (req, res) => {
  console.log(req.file)
  res.send('File uploaded successfully!')
})

上传的文件将使用upload.single()方法传递给/upload端点,该方法指定上传一个文件(文件的命名和属性名在这里都是“photo”)。路由处理程序使用req.file变量来访问上传的文件,这个变量被Multer()翻译成Express的request对象,包含了文件的元数据,例如文件名、文件大小、文件类型及文件路径等信息。

Multer()常用方法

在上述示例中,我们使用了upload.single()方法。Multer()还提供了其他一些用于上传文件的方法:

  • upload.array(fieldname[, maxCount]) - 处理单个字段上传的文件数组。fieldname是传递给HTML表单的字段名,maxCount是表单允许上传的文件的最大数量。
  • upload.fields(fields) - 处理具有多个文件的特定字段的文件数组。fields指定上传文件名和属性名的键值对。
  • upload.none() - 确保没有上传的文件。如果有上传文件,它将抛出一个错误,否则它将执行唯一的请求处理程序。
  • upload.any() - 处理表单中的所有上传文件。无论有多少传入的文件,它都将工作。

文件存储和重命名

Multer()通过将上传的文件存储在内存中或将其存储在服务器的磁盘上,实现了文件上传。你可以通过调用upload()diskStorage()方法,对存储的位置和文件的重命名进行自定义。

下面,让我们来看看如何通过Multer()在服务器上存储文件。

const express = require('express')
const multer  = require('multer')
const app = express()

const storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, 'uploads/')
  },
  filename: function (req, file, cb) {
    cb(null, Date.now() + '-' + file.originalname)
  }
})

const upload = multer({ storage: storage })

app.post('/upload', upload.single('photo'), (req, res) => {
  console.log(req.file)
  res.send('File uploaded successfully!')
})

在上述示例中,使用了diskStorage()方法来自定义存储位置和文件的重命名。destination选项规定了上传文件的存储目录,而filename选项允许你指定如何重命名上传的文件。

总结

Multer()是Node.js中最好的文件上传中间件之一,它可以帮助你处理文件上传和存储。在使用Multer()时,通常需要实例化它、添加到Express应用程序中,并使用Multer()的API来处理上传的文件。无论你是开发新的应用程序还是维护一个现有的应用程序,你都应该考虑使用Multer()。