Express文件上传中间件Multer

前言:

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

Multer中间件:

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

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

使用:

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

方法:

引用multer模块后,我们会获取到一个顶级方法。该方法是一个工厂函数,可以使用这个方法创建Multer对象。它接受一个选项对象,最基本的选项是dest,它告诉 Multer 文件的存储位置。如果忽略该选项,文件会被保存在内存中,并且永远不会写入硬盘中。

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

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

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

       encoding - 文件的编码类型

       mimetype - 文件的Mime类型

       size - 文件的大小

       destination - 文件的保存目录(DiskStorage)

       filename - 文件在destination中的名称(DiskStorage)

       path - 上传文件的全路径(DiskStorage)

       buffer - 文件对象的Buffer(MemoryStorage)

{ fieldname: 'f1',
  originalname: '小清新.png',
  encoding: '7bit',
  mimetype: 'image/png',
  destination: './www/upload/',
  filename: 'd52f74d801ddfca60d14e4c2cf5050cc',
  path: 'www/upload/d52f74d801ddfca60d14e4c2cf5050cc',
  size: 123309 }

.any() - 接收所有文件

接收请求中的所有文件。上传文件数组会被保存在req.files中。

更多关于multer对象中的方法请参见https://www.jb51.net/article/95488.htm

代码示例:

const express=require('express');
const bodyParser=require('body-parser');
const multer=require('multer');
const fs=require('fs');
const pathLib=require('path');

var objMulter=multer({dest: './www/upload/'});

var server=express();

server.use(objMulter.any());

server.post('/', function (req, res){
    //新文件名
    //newName = 'www/upload/d52f74d801ddfca60d14e4c2cf5050cc' + '.png'
    var newName=req.files[0].path+pathLib.parse(req.files[0].originalname).ext;
    fs.rename(req.files[0].path, newName, function (err){
        if(err)
            res.send('上传失败');
        else
            res.send('成功');
    });

    //1.获取原始文件扩展名
    //2.重命名临时文件
});

server.listen(8080);

 

你可能感兴趣的:(Express)