element-ui配合node实现自定义上传文件方式

 更新时间:2022年09月07日 08:57:20   作者:机智的赵先生  
这篇文章主要介绍了element-ui配合node实现自定义上传文件方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

element-ui配合node实现自定义上传文件

某些情况下,使用element-ui的upload组件默认上传无法满足我们的需求,so~今天主要介绍如何使用element-ui实现自定义上传,以及后端如何接收上传的文件信息和其他信息,根据element-ui文档,http-request可以自定义上传方法,会覆盖掉默认的上传。

首先我们来看前端代码:

<template>
  <div style="margin-top:100px">
    <el-form :model="form">
      <el-form-item label="姓名" label-width="50px">
        <el-input v-model="form.name"></el-input>
      </el-form-item>
      <el-form-item label="年龄" label-width="50px">
        <el-input v-model="form.age"></el-input>
      </el-form-item>
      <el-form-item label="文件" label-width="50px">
        <el-upload 
          class="upload-demo" 
          :auto-upload="false" 
          :limit="1" 
          ref="upload"
          :http-request="upload"
          multiple>
          <!-- :http-request="upload" -->
          <el-button size="small" type="primary">点击上传</el-button>
          <div slot="tip" class="el-upload__tip">只能上传pdf文件</div>
        </el-upload>
      </el-form-item>
    </el-form>
    
    <el-button type="primary" @click="upload">确定</el-button>
  </div>
</template>
<script>
  export default{
    name: 'upload',
    data() {
      return {
        form: {
          name: '',
          age: ''
        }
      }
    },
    methods: {
      upload() {
        const formData = new FormData();
        const file = this.$refs.upload.uploadFiles[0];
        const headerConfig = { headers: { 'Content-Type': 'multipart/form-data' } };
        if (!file) { // 若未选择文件
          alert('请选择文件');
          return;
        }
        formData.append('file', file.raw);
        formData.append('name', this.name);
        formData.append('age', this.age);
        this.$http.post('/api/upload', formData, headerConfig).then(res => {
          console.log(res);
        })
      }
    }
  }
</script>

由于是上传文件,所以我们需要配置下axios请求header的Content-Type为'multipart/form-data',this.$refs.upload.uploadFiles[0].raw即为我们选择的文件,name和age则为其他要传的信息。

接着,我们来看后端如何获取,这里以node为例:

我们需要安装multer中间件,npm install multer -S即可,接下来我们来看如何使用multer。

首先引入multer:

var express = require('express');
var multer = require('multer')
const upload = multer({ dest: 'uploads/' });
 
var app = express();
app.use(upload.single('file')); //
 
app.post('/api/upload', (req, res)=>{
  console.log(req.body);//获取到的age和name
  console.log(req.file);//获取到的文件
    //做些其他事情
})

整个过程下来,就完成了图片的上传,非常简单。

关于multer的用法:https://www.npmjs.com/package/multer

自定义elementui上传文件及携带参数

elementui提供了上传文件的ui,可以比较方便,我们需要它来完成自定义上传文件以及携带参数需要改写其中的一些方法来实现。

下面是一个简单的上传标签

    <el-upload
        ref="upload"
        style="display: inline"
        drag
        action=""
        :before-upload="beforeUploadHandle"
        :http-request="handleUploadForm"
        :auto-upload="false"
        multiple
        :limit="1"
        :on-exceed="handleExceed">
      <el-link icon="el-icon-paperclip" type="primary">添加需要上传的文件</el-link>
    </el-upload>

不自动上传

:auto-upload=“false”

限制上传文件个数

:limit=“1”

上传之前的校验

我们需要实现这个方法,来检测上传的合法性

:before-upload=“beforeUploadHandle”

上传时需要携带参数

需要上传的数据文件以及参数在这里来处理添加

:http-request=“handleUploadForm”

检测添加文件是否超过限制

:on-exceed=“handleExceed”

手动上传

其中的upload对应于上面的ref=“upload”,我们只需要给按钮实现一个方法执行此语句便可以实现自己点击上传

this.$refs.upload.submit();

具体实现

上传限制以及上传之前的校验不赘述,这里给出一个简单的demo。上传限制实现类似,只是给出一些提示信息,file便是我们上传的文件。 

    beforeUploadHandle(file) {
      if (
          file.type !== "image/png" &&
          file.type !== "image/jpeg"
      ) {
        this.$message.error("只支持.jpg、.jpeg、.jpe、.png文件!");
        return false;
      }
    },

携带参数

handleUploadForm(param) {
      console.log(this.pid)
      let thisInfo = this
      let formData = new FormData()
      // 在formData中加入我们需要的参数
      formData.append('file', param.file)
    	formData.append('id', this.pid)
    // 向后端发送数据
      thisInfo.$axios.post('api/user/update_Info/', formData).then((res) => {
        if (res.status === 200) {
          thisInfo.$message.success('修改信息成功')
        } else {
          thisInfo.$message.success('修改信息失败')
        }
        thisInfo.formFileList = []
        thisInfo.uploadFormFileList = []
      })
    }

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。 

相关文章

  • Vue开发实例探究key的作用详解

    Vue开发实例探究key的作用详解

    这篇文章主要为大家介绍了Vue开发实例探究key的作用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01
  • Vue+Electron打包桌面应用(超详细完整教程)

    Vue+Electron打包桌面应用(超详细完整教程)

    这篇文章主要介绍了Vue+Electron打包桌面应用超详细完整教程,在这大家要记住整个项目的json文件不能有注释,及时没报错也不行,否则运行命令时还是有问题,具体细节问题参考下本文详细讲解
    2024-02-02
  • vue-cli 介绍与安装

    vue-cli 介绍与安装

    这篇文章主要给大家介绍的是vue-cli 介绍与安装,vue-cli是和vue进行深度组合的工具,可以快速帮我们创建vue项目,并且把一些脚手架相关的代码给我们创建好。真正使用vue开发项目,都是用vue-cli来创建项目的,下面文章详细内容,需要的朋友可以参考一下
    2021-10-10
  • vue子传父关于.sync与$emit的实现

    vue子传父关于.sync与$emit的实现

    这篇文章主要介绍了vue子传父关于.sync与$emit的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • Vue实现用户没有登陆时,访问后自动跳转登录页面的实现思路

    Vue实现用户没有登陆时,访问后自动跳转登录页面的实现思路

    这篇文章主要介绍了Vue实现用户没有登陆时,访问后自动跳转登录页面,定义路由的时候配置属性,这里使用needLogin标记访问页面是否需要登录,本文通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-02-02
  • Vue+Mock.js模拟登录和表格的增删改查功能

    Vue+Mock.js模拟登录和表格的增删改查功能

    这篇文章主要介绍了Vue+Mock.js模拟登录和表格的增删改查功能,需要的朋友可以参考下
    2018-07-07
  • vue+echarts实现堆叠柱状图

    vue+echarts实现堆叠柱状图

    这篇文章主要为大家详细介绍了vue+echarts实现堆叠柱状图,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • vue3 pinia踩坑及解决方案详解

    vue3 pinia踩坑及解决方案详解

    这篇文章主要为大家介绍了vue3 pinia踩坑及解决方案详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • Vuex进行Echarts数据页面初始化后如何更新dom

    Vuex进行Echarts数据页面初始化后如何更新dom

    这篇文章主要为大家详细介绍了使用Vuex做Echarts数据时,当页面初始化后如何更新dom,文中的示例代码讲解详细,有需要的小伙伴可以跟随小编一起学习一下
    2023-11-11
  • vue自定义底部导航栏Tabbar的实现代码

    vue自定义底部导航栏Tabbar的实现代码

    这篇文章主要介绍了vue自定义底部导航栏Tabbar的实现代码,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-09-09

最新评论