首页 > 语言 > JavaScript > 正文

express文件上传中间件Multer详解

2024-05-06 15:08:00
字体:
来源:转载
供稿:网友

前言

Express默认并不处理HTTP请求体中的数据,对于普通请求体(JSON、二进制、字符串)数据,可以使用body-parser中间件。而文件上传(multipart/form-data请求),可以基于请求流处理,也可以使用formidable模块或Multer中间件。

1. multer中间件

Multer是Express官方推出的,用于Node.jsmultipart/form-data请求数据处理的中间件。

它基于busboy构建,可以高效的处理文件上传,但并不处理multipart/form-data之外的用户请求。

2. 安装

npm install multer --save

3. 使用

Multer在解析完请求体后,会向Request对象中添加一个body对象和一个file或files对象(上传多个文件时使用files对象 )。其中,body对象中包含所提交表单中的文本字段(如果有),而file(或files)对象中包含通过表单上传的文件。

基本使用示例如下:

var express = require('express')var multer = require('multer')var upload = multer({ dest: 'uploads/' })var app = express()app.post('/profile', upload.single('avatar'), function (req, res, next) { // req.file 是 `avatar` 文件 // req.body 对象中是表单中提交的文本字段(如果有)})app.post('/photos/upload', upload.array('photos', 12), function (req, res, next) { // req.files 是 `photos` 文件数组 // req.body 对象中是表单中提交的文本字段(如果有)})var cpUpload = upload.fields([{ name: 'avatar', maxCount: 1 }, { name: 'gallery', maxCount: 8 }])app.post('/cool-profile', cpUpload, function (req, res, next) { // req.files 是一个对象 (String -> Array),文件的字段名是其 key,文件数组是 key的值 // // 如: // req.files['avatar'][0] -> File // req.files['gallery'] -> Array // // req.body 对象中是表单中提交的文本字段(如果有)})

在使用中,如果仅需要处理multipart表单中的文本字段,可以使用multer中的.single() .array()fields()方法。

如,可以像下面这样使用.array()方法:

var express = require('express')var app = express()var multer = require('multer')var upload = multer()app.post('/profile', upload.array(), function (req, res, next) { // req.body 中包含文本字段})

4. multer的API

4.1 文件对象

multer解析完上传文件后,会被保存为一个包含以下字段的对象:

       fieldname - 表单提交的文件名(input控件的name属性)

       originalname - 文件在用户设备中的原始名称

       encoding - 文件的编码类型

       mimetype - 文件的Mime类型

       size - 文件的大小

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选