当前位置:网站首页 > Node.js开发 > 正文

Node学习(九)023-管理系统之添加英雄——文件上传-multer第三方模块之multer简介、multer配置、multer使用 & 使用myupload.single() 方法作为接口的中间件

Node学习(九)023-管理系统之添加英雄——文件上传-multer第三方模块之multer简介、multer配置、multer使用 & 使用myupload.single() 方法作为接口的中间件

multer第三方模块

1、简介

  • multer 是基于express框架的一个实现文件上传功能的中间件。
  • multer在GitHub仓库地址是:https://github.com/expressjs/multer,里面有中文文档

2、配置

使用multer,主要用于文件上传。那么文件上传到哪里?保存到哪里?上传后的文件名是否需要重命名等等问题,都可以通过multer来进行配置。

下面介绍一种非常简单的配置,一般网站使用此配置即可。

// 加载模块 const multer = require('multer'); // 配置 /* 1. 调用multer函数,需要给他传递一个对象,来对上传的文件进行配置 2. dest:表示目标,在这里表示文件上传的保存位置。下面设置上传的文件保存在当前文件夹的myup子文件夹中 3. 设置dest为一个目录后,如果该目录不存在,还可以自行创建该文件夹。 4. 得到的myupload是一个对象,该对象的几个方法都可以当做中间件,可以在添加或注册的时候使用 */ const myupload = multer({ 
    dest: __dirname + '/myup' }); 

如果需要更加复杂的配置,则看下面的代码

// 加载模块 const multer = require('multer'); // 配置 /* 1. 仍然是调用multer函数,给它传递一个对象进行配置 2. storage:文件的存储引擎,multer内置了磁盘存储(DiskStorage)和内存存储(MemoryStorage) 3. 下面使用的是diskStorage磁盘存储引擎,及它的配置 4. destination表示上传文件的存储路径,可以是一个函数,也可以是一个字符串 如果用函数设置此项,函数的三个形参,分别表示请求的req对象、表示上传文件的file对象和一个回调函数 无论使用函数还是字符串设置destination,都不会自动创建文件夹 5. filename 用于确定文件夹中的文件名的确定。 如果没有设置 filename,每个文件将设置为一个随机文件 名,并且是没有扩展名的。 6. 下面配置中,回调函数中的file形参表示上传的文件对象,对象的属性见后面的表 */ const myupload = multer({ 
    storage: multer.diskStorage({ 
    destination: function (req, file, cb) { 
    // cb是回调函数,用它设置上传路径,null的位置可以写成err,用于获取错误,使用null表示不获取错误 cb(null, __dirname + '/abcd') }, // destination: __dirname + '/cdef', filename: function (req, file, cb) { 
    cb(null, file.fieldname + '-' + Date.now()) } }) }); 

上面配置 destination和filename函数的file参数表示上传的文件对象,该对象具有以下属性:

Key Description
fieldname Field name 由表单指定
originalname 用户计算机上的文件的名称
encoding 文件编码
mimetype 文件的 MIME 类型
size 文件大小(字节单位)
destination 保存路径
filename 保存在 destination 中的文件名
path 已上传文件的完整路径

3、使用

在有文件上传的请求处理中,使用中间件即可

/// 1. 单文件上传  // 单文件上传使用方式(形如:<input type="file" name="pic" />) /* 在下面的 /abc 接口中,使用myupload.single() 方法作为该接口的中间件 myupload.single() 的参数 pic 为 表单项的name值 因为是单文件上传,所以在函数内部可以通过req.file 来获取上传的文件对象 */ app.post('/abc', myupload.single('pic'), (req, res) => { 
    console.log(req.file); // 上传的文件对象 console.log(req.body); // 表单的文本信息 res.send('文件上传成功'); }); /// 2. 多文件上传  // 一个可以多文件上传的文件域(形如:<input type="file" multiple name="pic" />) /* 在下面的 /abc 接口中,使用myupload.array() 方法作为该接口的中间件 myupload.array() 的参数 pic 为 表单项的name值, 2 表示允许上传的文件个数不能超过2个 因为是多文件上传,所以在函数内部可以通过req.files 来获取上传的文件对象 */ app.post('/abc', myupload.array('pic', 2), (req, res) => { 
    console.log(req.files); console.log(req.body); res.send('文件上传成功'); }); /// 3. 多个文件域  // 有多个文件域 (形如:<input type="file" multiple name="pic1" /><input type="file" multiple name="pic2" />) /* 在下面的 /abc 接口中,使用myupload.fields() 方法作为该接口的中间件 myupload.fields() 的参数 为一个数组,数组中的每个单元对应着一个文件域,name为文件域name属性值,maxCount表示该文件域可以选择的文件个数最大值 因为是多文件上传,所以在函数内部可以通过req.files 来获取上传的文件对象 */ let up = upload.fields([ { 
    name: 'pic1', maxCount: 1 }, { 
    name: 'pic2', maxCount: 8 } ]); app.post('/abc', up, (req, res) => { 
    console.log(req.files); console.log(req.body); res.send('文件上传成功'); }); 
到此这篇Node学习(九)023-管理系统之添加英雄——文件上传-multer第三方模块之multer简介、multer配置、multer使用 & 使用myupload.single() 方法作为接口的中间件的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • Node学习(九)061-管理系统之登录和注册——md5加密 & 前端注册成功跳转登录页 & 前端登录成功跳转首页 & node服务器之post接口写法2024-11-29 10:36:07
  • Node学习(九)063-会话技术简介之cookie的设置和获取——会话控制的分类之cookie-保存客户端(浏览器)、session-保存服务器 & cookie的设置与获取 & cookie有效期2024-11-29 10:36:07
  • Node学习(九)064-会话技术简介之session的设置和获取——设置与获取之express-session模块& session有效期& 删除session& cookie和session的原理2024-11-29 10:36:07
  • Node学习(九)065-会话技术简介之cookie和session的优缺点——cookie-优点是节省服务器空间,缺点不安全 & session-优点是安全,缺点需要服务器空间 & 语法之设置和获取2024-11-29 10:36:07
  • Node学习(九)07-使用验证码——必须登录才能访问页面 & 模糊搜索的时候重置分页页码2024-11-29 10:36:07
  • Node学习(八)02-Node中的模块化——用module.exports实现模块化-封装并导出db.js模块之mysql增删改查& 步骤之连服务器、键值照应、封装导出模块、导入模块并打印服务器数据2024-11-29 10:36:07
  • Node学习(八)01-Node中的模块化——一个js文件就是一个模块& js中声明的属性和方法挂载global对象下则是全局作用域&module.exports导出属性和方法&require导入模块2024-11-29 10:36:07
  • Node学习(五)021-处理静态资源——中间件是express最大特色-app.use() & 有三个基本参数req、res、next & 自定义中间件处理静态资源文件-sendFile异步读取文件2024-11-29 10:36:07
  • Node学习(五)01-express框架——使用express搭建web服务器 & 启动命令之node或nodemon+空格+文件相对路径 __dirname指当前文件所在文件夹的绝对路径2024-11-29 10:36:07
  • Node学习(四)-npm概述——使用npm安装第三方模块之全局安装、本地局部安装2024-11-29 10:36:07
  • 全屏图片