el-upload http-request使用 多个文件上传携带其他参数方式

目录
  • el-upload http-request使用
  • el-upload自定义http-request上传踩坑

el-upload http-request使用

1、http-request:覆盖默认的上传行为,可以自定义上传的实现

2、不需要给action关联上传的地址,但是action这个属性必须写

3、在http-request自定义上传事件中将上传文件保存到一个数组中

4、 接口使用formData表单数据格式传参, 将上传的文件和其他参数一起传给接口,使用的方法是new FormData()

4、如果是单文件上传并携带参数,可以直接在http-request自定义事件中调用后端接口

多文件上传携带参数完整代码参考如下:

<template>
  <div>
    <el-form
      :model="formData"
      label-width="80px"
    >
      <el-form-item
        label="科目名称"
        prop="name"
      >
        <el-input v-model="formData.name" />
      </el-form-item>
      <el-form-item label="上传文件">
        <el-upload
          action
          :http-request="httpRequest"
          :before-upload="beforeUploadClick"
          :on-exceed="handleExceed"
          :limit="2"
          multiple
          :show-file-list="false"
        >
          <el-button
            slot="trigger"
            size="small"
            type="primary"
          >选取文件</el-button>
        </el-upload>
      </el-form-item>
      <el-form-item>
        <el-button
          type="primary"
          @click="saveClick"
        >保存</el-button>
      </el-form-item>
    </el-form>
  </div>
</template>
<script>
import axios from 'axios'
export default {
  data() {
    return {
      formData: { name: '' },
      fileList: []
    }
  },
  methods: {
    // 重写文件上传方法,覆盖原有的上传方法,将上传的文件依次添加到fileList数组中
    httpRequest(option) {
      this.fileList.push(option)
    },
     // 上传前处理
    beforeUploadClick(file) {
    },
    // 文件数量过多时提醒
    handleExceed() {
      this.$message({ type: 'info', message: '最多支持2个附件上传' })
    },
    // 表单提交
    async saveClick() {
      // 使用form表单的数据格式
      const paramsData = new FormData()
      // 将上传文件数组依次添加到参数paramsData中
      this.fileList.forEach((it, index) => {
        paramsData.append(`file${index}`, it.file)
      });
      // 将表单数据添加到参数paramsData中
      paramsData.append('name', this.formData.name)
      // 表单数据和文件一起上传,调用后端接口
      const res = await axios({
        url: '后端接口地址',
        method: 'post',
        data: paramsData
      })
    }
  }
}
</script>

el-upload自定义http-request上传踩坑

el-upload自定义上传的坑

:http-request 指令的使用

使用该指令, :on-success, :on-error 指令是不会触发的

<el-form-item label="logo" prop="logo">
        <el-upload
          class="upload-demo"
          ref="upload"
          action="string"
          accept="image/jpeg,image/png,image/jpg"
          list-type="picture-card"
          :before-upload="onBeforeUploadImage"
          :http-request="UploadImage"
          :on-change="fileChange"
          :file-list="fileList"
        > 
          <el-button size="small" type="primary">点击上传</el-button>
          <div slot="tip" class="el-upload__tip">只能上传jpg/jpeg/png文件,且不超过500kb</div>
        </el-upload>
      </el-form-item>

说明:

  • before-upload 上传文件之前的钩子
  • action 可以使用普通字符串代替,没有什么意义,但不建议删除,因为我们使用http-request 这个指令
  • http-request 自定义request请求
  • on-change 上传文件改变时候触发的方法

还可以解决这个问题 limit设置为1, 点击上传不起效果

data() {
    fileList: [],
    logo: '',
}
methods: {
    onBeforeUploadImage(file) {
      const isIMAGE = file.type === 'image/jpeg' || 'image/jpg' || 'image/png'
      const isLt1M = file.size / 1024 / 1024 < 1
      if (!isIMAGE) {
        this.$message.error('上传文件只能是图片格式!')
      }
      if (!isLt1M) {
        this.$message.error('上传文件大小不能超过 1MB!')
      }
      return isIMAGE && isLt1M
    },
    UploadImage(param){
      const formData = new FormData()
      formData.append('file', param.file)
      UploadImageApi(formData).then(response => {
          console.log('上传图片成功')
        param.onSuccess()  // 上传成功的图片会显示绿色的对勾
        // 但是我们上传成功了图片, fileList 里面的值却没有改变,还好有on-change指令可以使用
      }).catch(response => {
        console.log('图片上传失败')
        param.onError()
      })
    },
    fileChange(file){
      this.$refs.upload.clearFiles() //清除文件对象
      this.logo = file.raw // 取出上传文件的对象,在其它地方也可以使用
      this.fileList = [{name: file.name, url: file.url}] // 重新手动赋值filstList, 免得自定义上传成功了, 而fileList并没有动态改变, 这样每次都是上传一个对象
    },
}

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

(0)

相关推荐

  • element-ui中el-upload多文件一次性上传的实现

    项目需求是多个文件上传,在一次请求中完成,而ElementUI的上传组件是每个文件发一次上传请求,因此我们借助FormData的格式向后台传文件组 html代码 <div class="upload-file"> <el-upload accept=".xlsx" ref="upload" multiple :limit="5" action="http://xxx.xxx.xxx/personal

  • vue+el-upload实现多文件动态上传

    vue+el-upload多文件动态上传,供大家参考,具体内容如下 使用场景 点击[添加/删除],可动态增加/删除行数,并为每行上传附件,附件暂存前端,点击[上传]可以将所有附件和部分名称同时提交后台,实现表格的动态多文件上传.其中el-upload ,相关钩子函数可查看el-upload 官方文档 这里的表格行的新增是在弹框中填完再写入的,也可直接在表格中添加行,然后填写内容(template slot-scope="scope" 注释部分代码),这里仅提供思路 代码html部分 &

  • 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="

  • el-upload http-request使用 多个文件上传携带其他参数方式

    目录 el-upload http-request使用 el-upload自定义http-request上传踩坑 el-upload http-request使用 1.http-request:覆盖默认的上传行为,可以自定义上传的实现 2.不需要给action关联上传的地址,但是action这个属性必须写 3.在http-request自定义上传事件中将上传文件保存到一个数组中 4. 接口使用formData表单数据格式传参, 将上传的文件和其他参数一起传给接口,使用的方法是new FormDa

  • 基于java文件上传-原始的Servlet方式

    前言:干了这几个项目,也做过几次文件上传下载,要么是copy项目以前的代码,要么是百度的,虽然做出来了,但学习一下原理弄透彻还是很有必要的.刚出去转了一圈看周围有没有租房的,在北京出去找房子是心里感觉最不爽的时候,没有归属感,房租还不便宜,RT,不能好高骛远,还是脚踏实地一点一点学技术吧,终将有一日,工资会涨的. java文件上传 传统的文件上传,不用jquery插件的话,就是用form表单提交,项目里用过uploadify,可以异步上传文件,原理我也没研究.现在说传统的form表单上传文件.

  • 原生ajax和iframe框架实现图片文件上传的两种方式

    大家应该可以举出几种常用的异步文件上传功能的实现方式,使用频率较多的有原生ajax和iframe框架,实现图片文件上传,下面就为大家分享图片文件上传的两种方式:原生ajax和iframe框架,供大家参考,具体内容如下 方法一:利用iframe框架上传图片 html代码如下: <div class="frm"> <form name="uploadFrom" id="uploadFrom" action="upload.

  • JavaWeb实现文件上传下载功能实例解析

    在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用Servlet获取上传文件的输入流然后再解析里面的请求参数是比较麻烦,所以一般选择采用apache的开源工具common-fileupload这个文件上传组件.这个common-fileupload上传组件的jar包可以去apache官网上面下载,也可以在struts的lib文件夹下面找到,stru

  • asp.net中Fine Uploader文件上传组件使用介绍

    最近在处理后台数据时需要实现文件上传.考虑到对浏览器适配上采用Fine Uploader. Fine Uploader 采用ajax方式实现对文件上传.同时在浏览器中直接支持文件拖拽[对浏览器版本有要求类似IE版本必须是9或是更高的IE10].在不同浏览器中提供统一用户体验.该组件基本覆盖目前所有主流浏览器.同时没有任何第三方组件依赖.相当Clear.在服务器端已经覆盖支持了ASP.NET/ColdFusion/Java/Node.js/Perl/PHP/Python. 对上传细节类似限制文件大

  • Apache 文件上传与文件下载案例详解

    写一个Apache文件上传与文件下载的案例:以供今后学习 web.xml配置如下: <span style="font-family:SimSun;font-size:14px;"><?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns=&

  • Struts2实现单文件或多文件上传功能

    一.简述 Struts2的文件上传其实也是通过拦截器来实现的,只是该拦截器定义为默认拦截器了,所以不用自己去手工配置,<interceptor name="fileUpload" class="org.apache.struts2.interceptor.FileUploadInterceptor"/> 二.指定用户上传文件的大小,有两种方式 1)默认是在default.properties 文件的 struts.multipart.maxSize=20

  • 两种java文件上传实例讲解

    本文通过两种文件上传实例进行比较,帮助大家更好的学习java文件上传功能,具体内容如下 1. Java附件上传代码     @Controller public class UploadFile extends BaseJsonController{ /** * 附件上传 * * @param request * @param creativeFile * @param response * @return */ @RequestMapping(value = "/upload/uploadFi

  • asp.net下大文件上传知识整理

    最近做在做ePartner项目,涉及到文件上传的问题. 以前也做过文件上传,但都是些小文件,不超过2M. 这次要求上传100M以上的东西. 没办法找来资料研究了一下.基于WEB的文件上传可以使用FTP和HTTP两种协议,用FTP的话虽然传输稳定,但安全性是个严重的问题,而且FTP服务器读用户库获取权限,这样对于用户使用来说还是不太方便. 剩下只有HTTP.在HTTP中有3种方式,PUT.WEBDAV.RFC1867,前2种方法不适合大文件上传,目前我们使用的web上传都是基于RFC1867标准的

  • ASP.NET多文件上传控件Uploadify的使用方法

    对于Uploadify文件上传之前已经讲过一次(文件上传~Uploadify上传控件),只不过没有涉及到多文件的上传,这回主要说一下多个文件的上传,首先,我们要清楚一个概念,多文件上传前端Uploadify是通过轮训的方式去调用我们的后台upload程序的,所以,对于多文件上传来说,也没什么稀奇的. 下面是文件上传后的缩略图如下 列表的组装使用JS模板,这样对于复杂的HTML结构来说,可以减少拼写错误的出现,关闭是将LI元素从UI元素移除,最后提交时,从UI里检查LI元素,然后对它进行组装,并进

随机推荐