express文件上传中间件Multer详解

Express文件上传中间件Multer详解

Multer是基于Express框架的一个文件上传中间件,它提供了非常方便的文件上传方式并且可以做一些文件的过滤和限制。

安装

使用npm进行安装:

npm install multer

基本使用

Multer可以非常方便地完成文件上传的操作。只需要在路由中引用Multer并设置上传目录和上传文件命名规则即可。

以下是一个简单的例子:

const express = require('express');
const router = express.Router();
const multer = require('multer');

// 定义上传目录和文件名规则
const storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, 'uploads/');
  },
  filename: function (req, file, cb) {
    cb(null, file.originalname);
  }
})

const upload = multer({ storage: storage })

router.post('/upload', upload.single('file'), function (req, res, next) {
  res.send('上传成功!');
});

module.exports = router;

以上的代码通过Multer进行文件上传,由于单文件上传,因此使用的是upload.single()方法,其中'file'是上传文件表单的name属性。

需要注意的是,在Multer中使用的diskStorage存储引擎,其默认是在操作系统的临时目录下完成文件存储,因此一定要在完成文件上传后将其移动到目标目录下。

除此之外,Multer还支持多文件上传,甚至可以支持上传多种类型的文件,下面是更为复杂的例子。

详细使用

多文件上传

在Multer中,通过upload.array()upload.fields()方法可以完成多文件上传的操作。其中,upload.array()方法用于上传文件数量明确的情况,而upload.fields()方法则用于上传数量不明确且需要使用名称分组的情况。

以下是一个使用upload.array()方法上传多个文件的例子:

const express = require('express');
const router = express.Router();
const multer = require('multer');

// 定义上传目录和文件名规则
const storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, 'uploads/');
  },
  filename: function (req, file, cb) {
    cb(null, file.originalname);
  }
})

const upload = multer({ storage });

router.post('/upload', upload.array('files'), function (req, res, next) {
  res.send('上传成功!');
});

module.exports = router;

在以上代码中,使用的是upload.array('files')方法,其中'files'表示文件表单的名称。

限制上传文件类型和大小

在Multer中,通过fileFilterlimits属性可以对文件进行限制,例如只允许上传图片类型文件和文件大小不能超过2M的限制。

以下是一个例子:

const express = require('express');
const router = express.Router();
const multer = require('multer');

// 定义上传目录和文件名规则
const storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, 'uploads/');
  },
  filename: function (req, file, cb) {
    cb(null, file.originalname);
  }
});

// 限制文件上传类型
const fileFilter = function(req, file, cb) {
  if (!file.originalname.match(/\.(jpg|jpeg|png|gif)$/)) {
    return cb(new Error('只允许上传图片类型文件!'), false);
  }
  cb(null, true);
};

// 限制文件上传大小
const limits = {
  fileSize: 1024 * 1024 * 2 // 2M
};

const upload = multer({ storage, fileFilter, limits });

router.post('/upload', upload.single('file'), function (req, res, next) {
  res.send('上传成功!');
});

module.exports = router;

在以上代码中,定义了fileFilterlimits两个属性,其中fileFilter用于限制上传的文件类型,只有符合条件的文件会被保存。而limits则是用来限制上传的文件大小,超过限制的文件将会被拒绝上传。

总结

Multer提供了非常方便的文件上传方式,使我们不需要过多地关注文件上传的具体细节。同时,通过Multer的配置,我们可以限制上传的文件类型和大小,保证上传的文件符合我们的需求。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:express文件上传中间件Multer详解 - Python技术站

(0)
上一篇 2023年6月8日
下一篇 2023年6月8日

相关文章

  • Node.js 异步编程之 Callback介绍(一)

    “Node.js 异步编程之 Callback介绍(一)”这篇文章主要介绍了 Node.js 中回调函数的概念和使用方法,以及如何实现异步编程。下面是完整的攻略: 1. 回调函数是什么 回调函数是 Node.js 异步编程的重要概念之一。它是在一个函数执行完成后,通过参数调用另一个函数并把执行结果作为参数传递给它。 回调函数的实际应用非常广泛,比如读取文件、…

    node js 2023年6月8日
    00
  • nodejs创建简易web服务器与文件读写的实例

    让我为你详细介绍一下如何使用 Node.js 创建简易的 web 服务器并进行文件读写。 1. 安装 Node.js 首先,你需要安装 Node.js,如果你还没有安装的话。你可以从官网(https://nodejs.org/)下载并安装。 2. 创建项目目录 在命令行中输入以下命令: mkdir simple-web-server cd simple-we…

    node js 2023年6月8日
    00
  • JS简单实现仿百度控制台输出信息效果

    当我们在浏览器中打开百度首页并打开控制台后,可以发现每次搜索后,控制台上都会输出一些结果。这种在控制台上输出信息的效果,可以在JavaScript中实现。下面是详细的实现步骤: 步骤1:准备HTML页面 首先需要准备一个HTML页面,用于模拟百度首页。页面中需要包含搜索框、搜索按钮、以及显示搜索结果的区域。 <!DOCTYPE html> &lt…

    node js 2023年6月8日
    00
  • Node.js中的HTTP请求与响应详解

    下面是关于“Node.js中的HTTP请求与响应详解”的完整攻略。 一、HTTP请求 1.1 请求方法 HTTP请求的方法有多种,常用的有GET和POST两种方法。 GET方法:用于请求指定的页面或资源。 POST方法:向指定的资源提交要被处理的数据,例如提交表单。 Node.js中使用http模块发送HTTP请求,以GET和POST方法为例: GET方法 …

    node js 2023年6月8日
    00
  • 在JS循环中使用async/await的方法

    当在JavaScript中使用循环时,通常我们会面临一个问题,即如何同时异步执行循环体中的多个异步操作,并在它们都完成后执行下一步操作。对于这种情况,我们可以使用async/await结合并发循环来解决这个问题。 使用Promise.all结合循环并发执行异步操作 一种常见的使用async/await结合并发循环的方法是使用Promise.all。假设我们有…

    node js 2023年6月8日
    00
  • 浅谈HTTP 缓存的那些事儿

    以下是浅谈HTTP缓存的攻略。 什么是HTTP缓存? HTTP缓存是指将经常使用的静态资源(如图片、JavaScript、CSS文件等)存储在本地文件系统或浏览器缓存中,以便用户稍后访问同一网站时可以更快地加载该资源。HTTP缓存可以提高网站的性能和速度。 缓存分类 通常,HTTP缓存可以分为两类:浏览器缓存和服务器缓存。 浏览器缓存 浏览器缓存是由浏览器存…

    node js 2023年6月8日
    00
  • NodeJS开发人员常见五个错误理解

    NodeJS开发人员常见五个错误理解 1. Node.js 是单线程的,一定不会出现并行执行的情况 这是一个非常常见的错误理解,实际上 Node.js 并不是单线程的,它的事件循环机制可以充分利用多核 CPU 资源来并行执行代码。但是由于 Node.js 中的 I/O 操作都是异步非阻塞的,因此如果不加注意,在异步操作没有完成之前,事件循环会直接进入下一步操…

    node js 2023年6月8日
    00
  • 深入浅析Node环境和浏览器的区别

    深入浅析Node环境和浏览器的区别: 背景 Node.js 和浏览器是很相似的,它们都是基于 JavaScript 编写的,但是它们有很大的区别。理解 Node.js 和浏览器的区别对于成为一个全栈开发人员非常重要。本文将会向你详细介绍 Node.js 和浏览器之间的区别。 Node.js Node.js 是一个基于 V8 引擎的 JavaScript 运行…

    node js 2023年6月8日
    00
合作推广
合作推广
分享本页
返回顶部