首页 > 其他分享 >multer 库的使用

multer 库的使用

时间:2022-12-14 15:34:19浏览次数:36  
标签:fs const res req multer file 使用

multer 库的使用

  • 原生表单上传

    <!-- 必须要指定 enctype 值,因为默认是 application/x-www-form-urlencoded -->
    <form action="http://localhost:3000/test" method="post" enctype="multipart/form-data">
        <input type="file" name="avatar" />
        <button type="submit">提交</button>
    </form>
    
  • element-ui 组件上传

    <el-upload action="" :http-request="uploadFile" >
          <el-button type="primary" size="small">
            <i class="el-icon-upload2 el-icon--left" />
            点击上传文件
          </el-button>
    </el-upload>
    
    <script>
    	export default {
            methods: {
                // 可以肯定的说,这个 file 就是我们读到的文件,就是原生input框拿到的那种格式
                async uploadFile(file) {
                	await test(file)
                }
            }
        }
    </script>
    
    axiosRequest({
        method: 'post',
        url,
        data: file,  // 将上面的 file 传到这里就好了
        headers: {
            'Content-Type': 'multipart/form-data'  // 只要我们传的是原汁原味的 file,那么这里浏览器会自动帮我们加 boundry
        }
    })
    
  • 后端代码

    const fs = require('fs')
    const multer = require('multer')
    const upload = multer({ dest: 'uploads/' })  // 它会将读到的文件,暂存到这个目录下;这种相对路径,貌似也是你执行 node 指令时的路径为相对
    
    // upload.any() 是指可以传任意格式的文件(不太清楚这个配置项,下次可研究一下)
    // 因为我们拿到的originalname(读取到的文件名称)是乱码的,这里转码
    // 然后利用 fs 模块写入本地
    router.post('/test', upload.any(), (req, res) => {
        const fileName = Buffer.from(req.files[0].originalname, 'latin1').toString('utf8')
        const path = 'public/image/' + fileName
        fs.readFile(req.files[0].path, (err, data) => {
            if (err) {
                res.send(Message.sendFail())
            }else {
                fs.writeFile(path, data, err => {
                    if (err) {
                        res.send(Message.sendFail())
                    }else {
                        res.send(Message.sendSuccess())
                    }
                })
            }
        })
    })
    
    
  • 附一:req.files的内容

[
  {
    fieldname: 'file',
    originalname: 'QQæ\x88ªå\x9B¾20221214110458.jpg',
    encoding: '7bit',
    mimetype: 'image/jpeg',
    destination: 'uploads/',
    filename: '6c01384cdfeee88e04e97579aded5a09',
    path: 'uploads\\6c01384cdfeee88e04e97579aded5a09',
    size: 2827
  }
]

标签:fs,const,res,req,multer,file,使用
From: https://www.cnblogs.com/zhumenglong/p/16982287.html

相关文章

  • flask 框架使用
    https://blog.csdn.net/shifengboy/article/details/1142742711.安装flaskpipinstallflask2.简单上手一个最小的Flask应用如下:fromflaskimportFlaskapp=......
  • 使用go脚本解析bilibili TED 双语字幕
    最近想学一点英语,在b站上找到了TED合集,想把里面的字幕给整下来,所以就简单写了一个脚本,有兴趣的同学可以自取。拿到字幕在网页按F12,刷新页面,在network里过滤.json,出来......
  • JAVA-枚举使用
    枚举在本教程中,我们将了解什么是Java枚举、它们解决的问题以及它们的一些设计模式如何在实践中使用。1.概述Java5首先引入了enum关键字。它表示一种特殊类型的类,它总......
  • Html基本使用
    HTML:超文本标记语言定义页面结构CSS:层叠样式表页面显示的样式BootStrapJS:JavaScript界面交......
  • Ribbon介绍和使用
    Ribbon是Netflix公司提供的一个在SpringCloud中免费使用的客户端负载均衡器组件。它在集群中为各个客户端之间的通信提供支持,可以控制、管理HTTP和TCP客户端的负载均衡。......
  • k8s--service 之 HeadLiness、NodePort 使用
    前戏环境还是使用我们上节的环境HeadLiness在某些场景中,开发人员可能不想使用Service提供的负载均衡功能,而希望自己来控制负载均衡策略,针对这种情况,kubernetes 提供了H......
  • Jmeter小白使用攻略
    《Jmeter小白使用攻略》 一、主界面 二、如何测试一个接口              ......
  • vue-cli 和 vite 全局变量定义和使用
    vue-clivue.config.js//第一步,在vue.config.js中定义//注意:定义的变量必须是APP_开头。这是vue-cli的硬性规范。process.env.APP_VERSION=require('./pack......
  • [WPF] 使用 MVVM Toolkit 构建 MVVM 程序
    1.什么是MVVMToolkit模型-视图-视图模型(MVVM)是用于解耦UI代码和非UI代码的UI体系结构设计模式。借助MVVM,可以在XAML中以声明方式定义UI,并使用数据绑......
  • 使用MATLAB的Simulink进行梯形速度曲线规划算法仿真
    simulink简介Simulink是美国Mathworks公司推出的MATLAB中的一种可视化仿真工具,用于多域仿真以及基于模型的设计,能够提供图形编辑器、可自定义的模块库以及求解器,能够进行......