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

目录
  • element-ui配合node实现自定义上传文件
  • 自定义elementui上传文件及携带参数
    • 下面是一个简单的上传标签
    • 具体实现
    • 携带参数

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

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

(0)

相关推荐

  • 详解Vue ElementUI手动上传excel文件到服务器

    概述 具体需求场景如下: 选择excel文件后,需要把导入的excel文件手动上传到后台服务器,并将导入成功后的统计结果显示出来.官网也有手动上传的示例,通过 action="url" 传入地址的方式,但在实际项目中请求需要自己配置,下面具体说明实现的方法. 说明: 在上传文件到展示统计结果,我们后端给了两个接口:首先调用文件上传接口,上传成功后,根据后端返回的mark再调用统计结果接口. 属性设置 .vue文件 <el-row> <div class="e

  • vue+element_ui上传文件,并传递额外参数操作

    需求: 1.文件大小验证 2.文件类型验证 3.额外参数传输 <template> <el-upload class="upload-demo" action :limit="1" :file-list="formFileList" :http-request="handleUploadForm" :on-exceed="formHandleExceed" :on-remove="

  • 解析element-ui中upload组件传递文件及其他参数的问题

    最近项目用到了vuethink,里面集成了element-ui,之前一直用的是bootstrap框架,对js也是一知半解,然后也用过vue.js,但也是学的不通透的,然后就各种入坑. 下面就分析一下我使用element-ui遇到的问题以及解决方法吧,如有不足请指正. 首先在element-ui的官网里有对upload组件的简单的介绍 <el-upload class="upload-demo" action="https://jsonplaceholder.typico

  • elementui使用el-upload组件如何实现自定义上传

    目录 使用el-upload组件实现自定义上传 方式一:选择后自动上传 方式二:选择后手动上传 使用el-upload上传文件夹 封装elementui el-upload文件上传组件 使用el-upload组件实现自定义上传 方式一:选择后自动上传 使用 http-request 覆盖默认的上传行为,可以自定义上传的实现 利用 before-upload 上传文件之前的钩子,参数为上传的文件,若返回 false 或者返回 Promise且被 reject,则停止上传 template 部分 <

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

    目录 element-ui配合node实现自定义上传文件 自定义elementui上传文件及携带参数 下面是一个简单的上传标签 具体实现 携带参数 element-ui配合node实现自定义上传文件 某些情况下,使用element-ui的upload组件默认上传无法满足我们的需求,so-今天主要介绍如何使用element-ui实现自定义上传,以及后端如何接收上传的文件信息和其他信息,根据element-ui文档,http-request可以自定义上传方法,会覆盖掉默认的上传. 首先我们来看前端代

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

    目录 简介: 1.简单介绍组件( upload)的属性(熟悉参数的直接略过) 2.主要目的自定义上传文件 2.1 组件代码 2.2 data中的属性 2.3 methods的方法 3.与其他参数通过axios提交到后台 总结 简介: 自定义上传文件并与其他参数一同提交到后台(主要使用axios) 1.简单介绍组件( upload)的属性(熟悉参数的直接略过) 总结elmentUI一下它的使用和常用属性的作用. limit : 限制了上传文件的个数 , 如果你上传单个文件这里设置 1 ,多个文件就

  • JavaScript中三种异步上传文件方式

    异步上传文件是为了更好的用户体验,是每个前端必须掌握的技能.这里我提出三点有关异步文件上传的方式. 使用第三方控件,如Flash,ActiveX等浏览器插件上传. 使用隐藏的iframe模拟异步上传. 使用XMLHttpRequest2来实现异步上传. 第一种使用浏览器插件上传,需要一定的底层编码功底,在这里我就不讲了,以免误人子弟,提出这点大家可以自行百度. 第二种使用隐藏的iframe模拟异步上传.为什么在这里说的是模拟呢?因为我们其实是将返回结果放在了一个隐藏的iframe中,所以才没有使

  • 使用RestTemplate 调用远程接口上传文件方式

    目录 RestTemplate 调用远程接口上传文件 问题描述 解决方法 第一种方式 第二种方式 RestTemplate调用远程接口添加请求头 RestTemplate 调用远程接口上传文件 问题描述 第三方写了一个文件上传的接口,该接口的请求方式为Post请求,请求参数全部是以form-data表单形式进行提交,包含三个参数 第一个:cookie(字符串类型) 第二个:seqNo(字符串类型) 第三个:file(文件类型) 解决方法 使用传统的Spring Cloud的Feign组件在调用远

  • node.js实现上传文件功能

    最近刚开始弄nond,写得不好见谅,有什么错误请指出: 首先安装node,安装步骤 这里以上传图片为例: 1.在该文件夹下生成package.json文件: 在本文件夹下打开命令行窗口(window系统,进入该文件夹按住shift然后点击鼠标右键,就可以直接选择在本文件夹中打开命令行窗口)输入:npm init 然后等有提示出来,一路Enter(懂的请无视,不懂且不想懂的一路Enter就是了),然后你就可以发现文件夹下有一个package.json文件,下面是刚生成的package.json文件

  • asp fckeditor自定义上传文件的文件名

    只需要在fckeditor\editor\filemanager\connectors\asp文件夹下的commands.asp修改一下即可 在这个文件中查找一下:FileUpload 会找到这个函数 把 复制代码 代码如下: Dim sFilePath sFilePath = CombineLocalPaths(sServerDir, sFileName) 改为 复制代码 代码如下: Dim sFilePath,ranNum Randomize ranNum=int(90000*rnd)+10

  • Vue Element UI + OSS实现上传文件功能

    Element提供了upload上传组件,可以查看官网upload组件的详细介绍:查看upload组件的上传源码upload/ajax,使用的是XHR对象上传文件.在项目实践中,发现该上传方法上传大文件时会出现问题,所以决定使用阿里云对象存储服务(Object Storage Service,简称OSS),OSS详细介绍可以查看官网,本文主要讲解的是OSS上传文件的前端,后台开发请查看官网介绍,SDK Browser.js讲解了前端如何进行上传. 1.使用npm安装SDK的开发包: npm in

  • vue上传文件formData上传的解决全流程

    目录 vue上传文件formData上传解决 axios实例的配置关键配置 整体流程解决跨域上传文件跨域上传FormData格式等问题 vue 批量上传文件 简单说明一个实现思路 vue上传文件formData上传解决 axios实例的配置关键配置 FormData 上传文件类型有变项目中封装的公共方法需要更改头部请求信息设置为设为 “multipart/form-data” 整体流程解决跨域上传文件跨域上传FormData格式等问题 vue中Dom结构 <input type="file

  • jQuery实现jQuery-form.js实现异步上传文件

    做为一个前端开发,你肯定遇到过这样的需求:异步上传文件,还要兼容IE 8.[纳尼,没遇到过,那你们产品和UI对你也忒好了吧. 遇到这种需求,如果项目不是很赶,可以自己用iframe来做,如果项目比较赶的话,就可以使用jquery-form.js插件来实现,方便快捷. 一.举个栗子 1.先下载 JQuery-form.js文件并引入,也可以使用CDN,因为是jquery插件,所以需要先引入jquery. 2.html 部分: <form action='' enctype="multipar

  • 简述Java异步上传文件的三种方式

    本文为大家分享了三种Java异步上传文件方式,供大家参考,具体内容如下 用第三方控件,如Flash,ActiveX等浏览器插件上传. 使用隐藏的iframe模拟异步上传. 使用XMLHttpRequest2来实现异步上传. 第一种使用浏览器插件上传,需要一定的底层编码功底,在这里我就不讲了,以免误人子弟,提出这点大家可以自行百度. 第二种使用隐藏的iframe模拟异步上传.为什么在这里说的是模拟呢?因为我们其实是将返回结果放在了一个隐藏的iframe中,所以才没有使当前页面跳转,感觉就像是异步操

随机推荐