Multer 是一个 node.js 中间件,用于处理 multipart/form-data 类型的表单数据,它主要用于上传文件

注意: Multer 不会处理任何非 multipart/form-data 类型的表单数据

使用方法:

安装 Multer

  1. npm install multer --save

安装 uuid (生成唯一标识,作为文件名)

  1. npm install uuid --save

保存图片

  1. var express = require('express')
  2. var path = require('path')
  3. var router = express.Router()
  4. var multer = require('multer')
  5. //uuid工具可以生成唯一标示 需要安装
  6. var UUID = require('uuid')
  7.  
  8. //设置保存规则
  9. var storage = multer.diskStorage({
  10. //destination:字段设置上传路径,可以为函数
  11. destination: path.resolve(__dirname, '../upload'),
  12.  
  13. //filename:设置文件保存的文件名
  14. filename: function(req, file, cb) {
  15. let extName = file.originalname.slice(file.originalname.lastIndexOf('.'))
  16. let fileName = UUID.v1()
  17. cb(null, fileName + extName)
  18. }
  19. })
  20.  
  21. //设置过滤规则(可选)
  22. var imageFilter = function(req, file, cb){
  23. var acceptableMime = ['image/jpeg', 'image/png', 'image/jpg', 'image/gif']
  24. //微信公众号只接收上述四种类型的图片
  25. if(acceptableMime.indexOf(file.mimetype) !== -1){
  26. cb(null, true)
  27. }else{
  28. cb(null, false)
  29. }
  30. }
  31.  
  32. //设置限制(可选)
  33. var imageLimit = {
  34. fieldSize: '2MB'
  35. }
  36.  
  37. //创建 multer 实例
  38. var imageUploader = multer({
  39. storage: storage,
  40. fileFilter: imageFilter,
  41. limits: imageLimit
  42. }).array('photos', 12) //定义表单字段、数量限制
  43.  
  44. router.post('/image', imageUploader, function(req, res, next) {
  45. //req.files中保存文件信息,如下
  46. // [ { fieldname: 'photos',
  47. // originalname: 'p8U85lWN0XyYcel_avatar_uploaded1439700817.69.jpg',
  48. // encoding: '7bit',
  49. // mimetype: 'image/jpeg',
  50. // destination: 'E:\\mine\\wechat\\upload',
  51. // filename: 'b585c040-0a6f-11e9-bbb6-fdcabd365420.jpg',
  52. // path:
  53. // 'E:\\mine\\wechat\\upload\\b585c040-0a6f-11e9-bbb6-fdcabd365420.jpg',
  54. // size: 16536 } ]
  55. console.log(req.files);
  56. })

NodeJs 使用 multer 实现文件上传的更多相关文章

  1. Nodejs进阶:基于express+multer的文件上传

    关于作者 程序猿小卡,前腾讯IMWEB团队成员,阿里云栖社区专家博主.欢迎加入 Express前端交流群(197339705). 正在填坑:<Nodejs学习笔记> / <Expre ...

  2. nodejs+multer+ajax文件上传

    前端 html代码 + ajax代码 form表单(无需指定action) <form enctype="multipart/form-data" method=" ...

  3. nodejs 实现简单的文件上传功能

    首先需要大家看一下目录结构,然后开始一点开始我们的小demo. 文件上传总计分为三种方式: 1.通过flash,activeX等第三方插件实现文件上传功能. 2.通过html的form标签实现文件上传 ...

  4. node.js中 express + multer 处理文件上传

    multer中间件,可以很方便的结合express处理用户表单上传的文件. 一.安装multer npm install multer 二.处理单个文件上传 const express = requi ...

  5. NodeJS使用formidable实现文件上传

    最近自学了一下NodeJS,然后做了一个小demo,实现歌曲的添加.修改.播放和删除的功能,其中自然要实现音乐和图片的上传功能.于是上网查找资料,找到了一个formidable插件,该插件可以很好的实 ...

  6. javascript结合nodejs实现多文件上传

    前端文件上传功能比较依赖后端,所以第一步用nodejs实现一个供文件上传的功能接口. 因为本人对nodejs也是一知半解,所以刚开始的想法是像原始的ajax交互那样,获取上传文件的内容,然后再通过no ...

  7. Node.js文件上传

    Node.js express使用Multer实现文件上传html部分 <div> <h3>文件上传:</h3> 选择一个文件上传: <br/> < ...

  8. 关于ajax 异步文件上传 node 文件后台接口

    <body> <img src="" alt="" id="img"> <input type="f ...

  9. 【nodejs】--express的中间件multer实现图片文件上传--【XUEBIG】

    Multer是nodejs中处理multipart/form-data数据格式(主要用在上传功能中)的中间件.该中间件不处理multipart/form-data数据格式以外的任何形式的数据 Tips ...

随机推荐

  1. 学习笔记TF057:TensorFlow MNIST,卷积神经网络、循环神经网络、无监督学习

    MNIST 卷积神经网络.https://github.com/nlintz/TensorFlow-Tutorials/blob/master/05_convolutional_net.py .Ten ...

  2. 使用python调用其他脚本

    cmd = '<command line string>' print(cmd) p = subprocess.Popen(args=cmd, shell=True, stdout=sub ...

  3. DNS实战--2

    构建企业级DNS服务压测,服务的功能测试,这些在生产中都要考虑到 1.硬件选型dns对网卡和cpu消耗大下面配置可以达到单台服务器每秒3万请求,0延时CPU:12c以上配置内存:16GB网络:千兆 2 ...

  4. div 内容宽度自适应、超出后换行

    div 内容宽度自适应,超出后换行 { max-width:100%;width: fit-content;width: -webkit-fit-content;width: -moz-fit-con ...

  5. wireless

    思科的AP分为胖AP和瘦AP,但其实只是AP中的Image不一样而已,硬件都是一样的,胖AP和瘦AP之间可以互相转换.即使你下单的时候下的是胖AP,拿到货要当瘦AP用,转换一下即可. [相互转换] 详 ...

  6. celery+Rabbit MQ实战记录

    基于以前的一篇文章,celery+Rabbit MQ的安装和使用, 本文更加详细的介绍如何安装和使用celey, Rabbit MQ. 并记录在使用celery时遇到的一些问题. 1.安装 Rabbi ...

  7. 如何清除Windows10中的恢复分区

    在Windows搜索框中键入Cmd.出现结果列表. 右键单击命令提示符并选择以管理员身份运行. 在命令提示符下键入diskpart,然后按Enter键. 输入list disk并按Enter键. 出现 ...

  8. 窗口置顶 - 仿TopWind

    前置学习:低级鼠标hook,获得鼠标状态. 这个在原来获得鼠标状态的基础上,加上一个事件处理即可. TopWind就是一个可以置顶窗口的文件,避免复制粘贴的时候的来回切换(大窗口与小窗口),算是一个实 ...

  9. 使用Navicat连接阿里云mysql报错10061

    1.添加一个远程访问账号admin mysql> use mysql; mysql> GRANT ALL ON *.* TO 账户@'%' IDENTIFIED BY '密码' WITH ...

  10. msf help.

    root@Debian:~# msfconsole [-] ***rtiNg the Metasploit Framework console...- [-] * WARNING: No databa ...