我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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 = []
      })
    }

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。 

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

element-ui el-upload实现上传文件及简单的上传文件格式验证功能

前端上传文件后,后端接受文件进行处理后直接返回处理后的文件,前端直接再将文件下载下来,下面这篇文章主要给大家介绍了关于element-ui el-upload实现上传文件及简单的上传文件格式验证功能的相关资料,需要的朋友可以参考下
2022-11-16

自定义input组件怎么实现拖拽文件上传

这篇“自定义input组件怎么实现拖拽文件上传”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“自定义input组件怎么实现拖拽
2023-07-05

python自定义模块使用.pth文件实现重用方式

Python自定义模块可用于创建可重用的代码。使用.pth文件,可以轻松地在不同项目中重用模块。只需在.pth文件中添加模块路径,并将该文件放置在Python路径中即可。导入模块时,Python会在.pth文件中搜索该路径。这种方法有助于保持模块组织,并允许在不同环境中使用一致的模块版本。然而,需要手动管理.pth文件,并且模块路径更改时需要更新文件。
python自定义模块使用.pth文件实现重用方式
2024-04-02

elementUI自定义上传文件功能实现(前端后端超详细过程)

自定义上传思路很简单,下面这篇文章主要给大家介绍了关于elementUI自定义上传文件功能实现(前端后端超详细过程)的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
2022-11-16

SpringBoot2如何基于Yml配置方式实现文件上传逻辑

这篇文章主要为大家展示了“SpringBoot2如何基于Yml配置方式实现文件上传逻辑”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“SpringBoot2如何基于Yml配置方式实现文件上传逻辑”
2023-06-02

编程热搜

目录