express文件上传中间件Multer详解

yizhihongxing

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使用Express创建Web项目详细教程

    以下是关于如何使用Express创建Web项目的详细攻略: 什么是Express? Express是Node.js的一个开源网络应用程序框架,它可以帮助我们方便快捷地创建Web应用程序。 步骤1:安装Node.js和npm 在使用Express之前,我们需要先安装Node.js和npm。具体安装方法可以参考官方文档:https://nodejs.org/。 …

    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
  • Nodejs模块的调用操作实例分析

    下面是“Nodejs模块的调用操作实例分析”的完整攻略。 1. Node.js模块概述 在Node.js中,一个.js文件就是一个模块。在一个模块中,可以定义变量、函数、类等内容,并通过module.exports将这些内容暴露出去。其他模块可以通过require函数引入这些内容,从而调用这些在模块中定义的变量、函数、类等。 2. Node.js模块的引入 …

    node js 2023年6月8日
    00
  • 如何让node运行es6模块文件及其原理详解

    首先需要明白的是,Node.js默认不支持ES6模块,而是支持CommonJS模块。因此,要运行ES6模块需要做一些配置。 配置步骤 1.先安装Node.js 14版本以上 Node.js 14版本以上才能支持ES6模块。可以通过以下指令查看当前安装版本: node -v 如果不符合要求,需要升级至14版本以上。 2.在package.json中设置type…

    node js 2023年6月8日
    00
  • 解析微信JS-SDK配置授权,实现分享接口

    好的。解析微信 JS-SDK 配置授权,实现分享接口需要以下步骤: 步骤1:获取 appid 和 appsecret 首先,你需要拥有一个已经在微信公众平台上注册的公众号,并且知道其中的 appid 和 appsecret 值。如果你还没有注册公众号,可以先去微信公众平台注册一个账号。 在微信公众平台中,找到自己创建的公众号,点击「开发」-「基本配置」,就可…

    node js 2023年6月8日
    00
  • JS removeAttribute()方法实现删除元素的某个属性

    当使用JS操作DOM元素时,常常需要删除某个元素的某个属性。而这个问题可以通过JS提供的removeAttribute()方法来解决。 removeAttribute()方法概述 removeAttribute()方法是JS操作DOM元素的一个方法,它可以删除一个元素的指定属性。它是Element对象的一个方法,因此只有元素节点才能使用它。该方法的语法如下:…

    node js 2023年6月8日
    00
  • node.js中的fs.appendFile方法使用说明

    当需要在文件末尾添加新的内容时,可以使用Node.js内置的fs模块中的appendFile()方法。下面是此方法的使用说明: 使用方法 首先需要引入fs模块,然后使用appendFile()方法。 const fs = require(‘fs’); fs.appendFile(‘文件路径’, ‘要追加的内容’, (error) => { if (er…

    node js 2023年6月8日
    00
  • nodejs中的读取文件fs与文件路径path解析

    Node.js是一种基于Chrome V8引擎的JavaScript运行环境,常用于后端开发。文件读取与路径解析是Node.js中重要的基础操作,本文将详细讲解Node.js中的文件读取模块fs与文件路径解析模块path的使用方法。 文件读取模块fs Node.js提供fs模块实现文件的读取、写入、截断、改名等操作。下面分别介绍fs模块的常见读取方法。 异步…

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