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连接mysql数据库遇到的问题和解决方案

    当使用Node连接MySQL数据库时,可能会遇到以下问题: 1.无法连接到数据库2.查询时出现错误3.无法处理回调函数 接下来我将分享一些解决这些问题的方法: 问题1:无法连接到数据库 当使用Node连接MySQL数据库时,可能会遇到无法连接到数据库的问题。出现这种情况可能是由于以下原因: 1.数据库已关闭2.重复的连接3.防火墙阻止了连接 下面是一个示例,…

    node js 2023年6月8日
    00
  • Angular8升级至Angular13遇到的问题解决

    以下是“Angular8升级至Angular13遇到的问题解决”的完整攻略。 背景 Angular是目前应用非常广泛的前端MVC框架之一。由于Angular版本更新较快,升级过程中会涉及到一定的风险,因此在升级之前需要仔细阅读相关的文档,避免不必要的麻烦。 升级步骤 步骤一:备份项目和依赖 在升级之前,需要备份项目和依赖。稍有不慎就会导致大量的工作和时间被浪…

    node js 2023年6月9日
    00
  • nodejs实现大文件(在线视频)的读取

    一、前言 随着互联网技术的发展,越来越多的媒体资源被上传到互联网上,在线播放已经成为了一个趋势。在实现在线播放过程中,我们需要处理一些大文件读取的问题。nodejs提供了一些较好的解决方案,下面就来详细讲解一下如何用nodejs实现大文件(在线视频)的读取。 二、方案 在nodejs中,主要有两种实现大文件(在线视频)的读取的方式,分别是流式读取和分块读取。…

    node js 2023年6月8日
    00
  • 详解nodejs操作mongodb数据库封装DB类

    下面我将为你详细讲解“详解nodejs操作mongodb数据库封装DB类”的完整攻略。 1. 前言 Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时,使用它可以在服务端运行 JavaScript 程序。而 MongoDB 是一个基于文档模型的 NoSQL 数据库。Node.js 与 MongoDB 的结合是一种非常常见而又…

    node js 2023年6月8日
    00
  • node.js使用Moment.js js 时间计算方法示例小结

    Node.js是一种基于Chrome V8 JavaScript引擎构建的JavaScript运行时工具,它使得JavaScript能够在服务器端运行,同时还支持NPM(Node Package Manager)模块化开发,这为Node.js带来了强大的扩展能力。而Moment.js是一种用于解析、格式化和操作日期对象的JavaScript库,它易于使用且具…

    node js 2023年6月8日
    00
  • 详解node-ccap模块生成captcha验证码

    当需要生成验证码时,node-ccap模块成了一种很不错的选择。下面是详细的步骤: 一、安装node-ccap模块 在终端中输入以下命令,即可完成node-ccap模块的安装: npm install ccap 二、使用node-ccap模块 我们首先需要使用require方法引入node-ccap模块: var captcha = require(‘cca…

    node js 2023年6月8日
    00
  • Node Mongoose用法详解【Mongoose使用、Schema、对象、model文档等】

    Node Mongoose用法详解 Mongoose是一个基于Node.js平台的MongoDB对象建模工具,它在操作MongoDB数据库时,提供了很多方便的操作方法,可以让我们更加方便、灵活地操作数据。本文介绍Mongoose的常用用法包括:Mongoose的使用、Schema的定义、Schema对象、model文档等。 Mongoose的使用 首先需要在…

    node js 2023年6月8日
    00
  • nodejs密码加密中生成随机数的实例代码

    下面详细讲解一下“nodejs密码加密中生成随机数的实例代码”的完整攻略。 1.前言 为了保护用户的密码,我们通常需要将其进行加密处理。在加密的过程中,生成一个随机数是非常重要的。在nodejs中,我们可以使用crypto模块来进行密码加密,并生成一个随机数,从而增强密码安全性。 2.生成随机数的实例代码 我们可以使用crypto模块中的randomByte…

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