美文网首页
nodejs-multer-图片处理插件

nodejs-multer-图片处理插件

作者: autumn_3d55 | 来源:发表于2022-03-21 16:06 被阅读0次

multer是一个Node.js中间件,用于处理 multipart/form-data 类型的表单数据,主要用于文件上传,注意:Multer中间件不会处理任何非 multipart/form-data 类型的表单数据。
Multer会自动添加一个body对象及file或files对象到 express框架的request 对象,fifile或fifiles对象包含表单上传的文件信息。
通过表单上传文件时需要注意的是:

(1)表单的提交方式只能是POST
(2)须设置表单的 enctype="multipart/form" 属性

1. 安装 multer插件

npm i multer -S

2.封装multer

  • 存放图片的文件夹,如果没有,需要手动创建,对应destination下的文件目录
    image.png
//封装上传图片

//引进multer模块  记得在终端安装multer模块
const multer = require("multer");
const path = require('path');

//3、对上传的文件进行配置
var storage = multer.diskStorage({

  //指定文件上传到服务器的路径
  destination: function (req, file, cb) {
    cb(null, './public/images') //上传目录
  },

  //指定上传到服务器文件的名称
  filename: function (req, file, cb) {
    // 1.获取文件后缀名
    let extname = path.extname(file.originalname);
    // 2.自定义文件名格式
    const filedname = Date.now() + '-' + Math.round(Math.random() * 1E9);
    cb(null, filedname + extname);//文件名
    // console.log(filedname+ extname);
  }
})
const upload = multer({ storage })

//导出模块
module.exports = upload

2. 使用

  • 前端需要把文件流传过来
const express = require('express');
const router = express.Router();
const multer = require('../utils/multer')

router.post('/',multer.single('file') ,async (req,res) => {
  let file = req.file;
  console.log(file);
  if(file) {
    res.json({
      status: 200,
      msg: '上传成功',
      fileName: '/images/' + file.filename
    })
  } else {
    res.json({
      status: -1,
      msg: '上传失败'
    })
  }
})

module.exports = router

3. 小程序vant-weapp 用法

<van-uploader file-list="{{ fileList }}"  max-count="3" bind:after-read="afterRead" />

// 上传图片
  afterRead(event) {
    const {
      file
    } = event.detail;
    // 当设置 mutiple 为 true 时, file 为数组格式,否则为对象格式
    wx.uploadFile({
      url: this.data.serveraddr + '/uploadImg', // 
      filePath: file.url,//这个必传
      name: 'file',//对应multer.single('file') 的file
      formData: {
        user: 'test'
      },
      success: res => {
        // 上传完成需要更新 fileList
        console.log(res);
        const {
          fileList = []
        } = this.data;
        fileList.push({
          ...file,
          url: JSON.parse(res.data).fileName
        });
        this.setData({
          fileList
        });
      },
    });
  },

4. vue element ui 用法

跳转到其他文章: https://www.jianshu.com/writer#/notebooks/51742359/notes/97174318

相关文章

网友评论

      本文标题:nodejs-multer-图片处理插件

      本文链接:https://www.haomeiwen.com/subject/tyhtjrtx.html