返回顶部
首页 > 资讯 > 精选 >vue+element-ui+axios多文件上传怎么实现并显示整体进度
  • 339
分享到

vue+element-ui+axios多文件上传怎么实现并显示整体进度

2023-06-29 23:06:47 339人浏览 八月长安
摘要

今天小编给大家分享一下Vue+element-ui+axiOS多文件上传怎么实现并显示整体进度的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一

今天小编给大家分享一下Vue+element-ui+axiOS多文件上传怎么实现并显示整体进度的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

element-ui+axios多文件上传并显示进度

element-ui自带的多文件上传是做成了多文件多次上传,公司有需求需要选取多个文件一次上传全部.

代码部分

<template>  <d2-container>    <el-fORM ref="form" :model="formData" label-width="120px">      <el-row>        <el-col :span="10">          <el-form-item label="图片"  prop="mediaFileUrl">            <el-upload               class="upload-demo"              ref="uploadMul"              multiple              action              drag              :limit="maxUploadSize"              :on-exceed="uploadLimit"              :Http-request="uploadFile"              :file-list="fileList"              :auto-upload="false"              :on-remove="handleRemove"              :before-upload="beforeUpload"              :on-change="uploadChange"            >              <i class="el-icon-upload"></i>              <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>              <div class="el-upload__tip" slot="tip">支持上传jpg/png/gif文件,且不超过100M</div>            </el-upload>            <div v-show="progressFlag" class="head-img">              <el-progress :text-inside="true" :stroke-width="14" :percentage="progressPercent" status="success"></el-progress>            </div>            <el-button size="mini" type="success" @click="submitUpload">上传到服务器</el-button>            <el-button v-if="this.fileList.length > 0" size="mini" type="warning" @click="clearFiles">清空</el-button>          </el-form-item>        </el-col>        <el-col :offset="4"></el-col>      </el-row>    </el-form>  </d2-container></template>
<script>import axios from 'axios'export default {  data () {    return {      maxUploadSize: 10,      progressFlag: false,      progressPercent: 10,      innerVisible: false,      fileList: [],      isViewDisabled: false,      formData: {},      param: {} // 上传文件主要参数    }  },  methods: {    submitUpload () {      if (this.fileList.length < 1) {        this.$message.warning('请选择文件!')        return false      }      this.$refs.uploadMul.submit()      if (this.param instanceof FormData) {        // 附加参数        this.param.append('expirationsec', 0)        this.param.append('fileproperty', 'publicfiles')        // const config = {        //   headers: { 'content-type': 'multipart/form-data' }        // }        // axios.post('/api/oss/ossUploadObject', this.param, config).then(res => {        //   if (res.status === 200 && res.data.status === 200) {        //     this.$message.success('上传成功!')        //     let result = res.data.body.data        //     console.log(result)        //   }        //   this.$refs.uploadMul.clearFiles()        //   this.param = {}        // })        let that = this        that.progressFlag = true        axios({          url: '/api/oss/ossUploadObject',          method: 'post',          data: that.param,          headers: { 'Content-Type': 'multipart/form-data' },          onUploadProgress: progressEvent => {            // progressEvent.loaded:已上传文件大小            // progressEvent.total:被上传文件的总大小            // 进度条            that.progressPercent = ((progressEvent.loaded / progressEvent.total) * 100).toFixed(0) | 0          }        }).then(res => {          this.param = {}          this.fileList = []          console.log(res)          if (res.data.status === 200 && that.progressPercent === 100) {            setTimeout(function () {              that.$message({                message: '上传成功!',                type: 'success',                duration: '2000'              })              that.progressFlag = false              that.progressPercent = 0              that.$refs.uploadMul.clearFiles()            }, 1000)            let result = res.data.body.data            console.log(result)          } else {            setTimeout(function () {              that.$message({                message: res.data.msg,                type: 'error',                duration: '2000'              })              that.progressFlag = false              that.progressPercent = 0              that.$refs.uploadMul.clearFiles()            }, 1000)          }        }).catch(() => {          that.progressFlag = false          that.progressPercent = 0          that.$refs.uploadMul.clearFiles()          that.$message({            message: '上传失败!',            type: 'error',            duration: '2000'          })        })      } else {        console.log(this.param instanceof FormData)      }    },    handleRemove (file, fileList) {      this.$message.warning(`已移除文件:  ${file.name}!`)      // 每移除一个文件,param重新赋值      this.param = new FormData()      this.fileList = [...fileList]      this.fileList.forEach((file, index) => {        this.param.append(`file`, file.raw) // 把单个文件重命名,存储起来(给后台)      })    },    uploadChange (file, fileList) {      // const videoType = ['image/gif', 'image/png', 'image/jpeg', 'video/mp4', 'video/flv', 'video/avi', 'video/rmvb']      // if (videoType.indexOf(file.raw.type) === -1) {      //   this.$message.error(`不支持此文件格式${file.raw.type}`)      //   this.$refs.uploadMul.clearFiles()      //   return false      // }      this.param = new FormData()      this.fileList = [...fileList]      this.fileList.forEach((file, index) => {        this.param.append(`file`, file.raw) // 把单个文件重命名,存储起来(给后台)      })    },    // 超出上传个数时调用    uploadLimit (files, fileList) {      this.$message.error(`最多允许同时上传${this.maxUploadSize}个文件!`)      // files.forEach((file, index) => {      //   console.log(index)      // })    },    beforeUpload (file) {    },    uploadFile (file) {      // 该方法需存在,防止空action时element-ui报404异常    },    clearFiles () {      this.fileList = []      this.param = {}      this.$refs.uploadMul.clearFiles()    },    // 初始化表单数据    init () {    }  }}</script><style lang="sCSS" scoped></style>

后端代码(模拟)

@RequestMapping("/oss/ossUploadObject")public ApiResponse<FileDto> uploadObject(@RequestParam("file") MultipartFile[] file, FileVo fileVo){    //...code    FileDto dto = new FileDto();    dto.setUrl("");    dto.setFileId("");    return ApiResponse.success(FileDto);}

解决element ui多文件上传的问题

业务场景

在使用vue+elementui 实现文件上传的时候,我发现官网给的组件每次都会自动上传,而且一次上传一个文件。但是我实际的业务是,一次上传多个文件。

解决办法

前端代码:

<template>  <div><!--    文件上传组件--><!--      :auto-upload="false" 这里设置为不自动上传 ,所以:action="BASE_API+'/upload'“ 失效-->  <el-upload    name="files"    class="upload-demo"    :on-change="OnChange"    :multiple="true"     :action="BASE_API+'/upload'"    :on-preview="handlePreview"    :before-remove="beforeRemove"    :file-list="list"    :auto-upload="false"    list-type="picture">    <i class="el-icon-plus"></i>    <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div>  </el-upload>  <el-dialog :visible.sync="dialogVisible">    <img width="100%" :src="dialogImageUrl" alt="">  </el-dialog>  <el-button type="" @click="fun">点击查看filelist</el-button>  <el-button type="" @click="onSubmit">提交</el-button>  </div> </template>
<script>  import upload from "@/api/upload"  import request from "@/utils/request"   export default {    data() {      return {        param: new FormData(),        form:{},        count:0,        list:[],        dialogVisible:false,        dialogImageUrl:'',        BASE_API: process.env.BASE_API, // 接口API地址      };    },    methods: {      handlePreview(file) {        this.dialogImageUrl = file.url;        this.dialogVisible = true;      },      beforeRemove(file, fileList) {        return this.$confirm(`确定移除 ${ file.name }?`);      },      OnChange(file,fileList){         console.log(fileList)        this.list=fileList       },      OnRemove(file,fileList){        this.list=fileList      },      fun(){        console.log('------------------------')        console.log(this.list)      },      onSubmit(){         // this.form={        //   a:1,        //   b:2,        //   c:3        // }        // let file=''        // for(let x in this.form){        //   this.param.append(x,this.form[x])        // }        // for(let i=0;i<this.list.length;i++){        //    const file='file'+this.count        //   this.count++        //   this.param.append(file,this.list[i].raw)        // }        // console.log(this.param)         console.log(this.list[0])         let formData = new FormData();        let file1 = this.list[0]        let file2 = this.list[1]        console.log(file1)        console.log(file2)        // 这里必须是 .raw 不然后端SpringBoot multipart 获取到的文件为 null        // 单个文件的话 后端接口写 Multipart file        // 多个文件的话 后端接口写 Multipart [] files        // 文件名需要对应        formData.append('files', file1.raw);        formData.append('files', file2.raw);        // formData.append('name', 'zhangsan');        // formData.append('files[]', file2);         request.post('/upload',formData,{          headers: {            'Content-Type': 'multipart/form-data'          }}).then(res=>{          console.log(res)        })         // request.post('/testabc?name='+formData.get("name")).then(res=>{        //   console.log(res)        // })         // upload.uploadfile(formData).then(res=>{        //   console.log(res)        // })        // batchTagInfo(this.param)        //   .then(res=>{        //     alert(res)        //   })      }    }  }</script> <style scoped></style>

后端接口代码:

package com.yj.wiki.controller;import org.springframework.WEB.bind.annotation.CrossOrigin;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RestController;import org.springframework.web.multipart.MultipartFile; @RestController@CrossOriginpublic class UploadFileController {     @PostMapping("/upload")    public String upload(MultipartFile[] files){         for (MultipartFile file : files) {            System.out.println(file.getOriginalFilename());         }         return "ok";    }     @PostMapping("/testabc")    public String upload(String name){         System.out.println(name    );         return "ok";    }}

以上就是“vue+element-ui+axios多文件上传怎么实现并显示整体进度”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网精选频道。

--结束END--

本文标题: vue+element-ui+axios多文件上传怎么实现并显示整体进度

本文链接: https://lsjlt.com/news/326765.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • vue+element-ui+axios多文件上传怎么实现并显示整体进度
    今天小编给大家分享一下vue+element-ui+axios多文件上传怎么实现并显示整体进度的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一...
    99+
    2023-06-29
  • vue+element-ui+axios多文件上传的实现并显示整体进度
    目录element-ui+axios多文件上传并显示进度解决element ui多文件上传的问题业务场景解决办法element-ui+axios多文件上传并显示进度 element-...
    99+
    2024-04-02
  • Vue Element UI + OSS怎么实现上传文件功能
    这篇文章主要为大家展示了“Vue Element UI + OSS怎么实现上传文件功能”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Vue Element UI...
    99+
    2024-04-02
  • JS实现上传文件显示进度条
    本文实例为大家分享了JS实现上传文件显示进度条的具体代码,供大家参考,具体内容如下 用户反馈:图片上传过程中,如果网络比较慢,会发现上传图片后没有一点反应,体验性很差,图片回显也比较...
    99+
    2024-04-02
  • HTML5如何实现上传文件显示进度
    这篇文章主要为大家展示了“HTML5如何实现上传文件显示进度”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“HTML5如何实现上传文件显示进度”这篇文章吧。 这...
    99+
    2024-04-02
  • HTML5中Ajax如何实现文件上传并显示进度条
    这篇文章主要介绍HTML5中Ajax如何实现文件上传并显示进度条,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体内容如下效果图:html5上传是同步上传的方式,所以能够实现进度条的显示。1.上传文件:首先我们用aj...
    99+
    2023-06-08
  • Java中怎么实现上传文件动态显示进度
    Java中怎么实现上传文件动态显示进度,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1.单例:用于保存进度信息;2.上传ser...
    99+
    2024-04-02
  • 如何实现react显示文件上传进度demo
    这篇文章给大家分享的是有关如何实现react显示文件上传进度demo的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Axios 是一个基于 promise 的 HTTP 库,可以用在浏览器和 node.js 中。在...
    99+
    2023-06-14
  • 使用struts2实现一个文件上传功能并显示进度条
    本篇文章为大家展示了使用struts2实现一个文件上传功能并显示进度条,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一. struts2读取进度原理分析 在strut2中控制文件上传信息的类是实现M...
    99+
    2023-05-31
    struts2 文件上传 进度条
  • Struts2实现文件上传时显示进度条功能
           最近在做一个资源共享的项目中,采用了Struts2.1.8+Spring2.5.6+hibernate3.32的框架整合方式进行开发。在文件上传这块,因为需要实现文件...
    99+
    2023-05-31
    struts2 上传 进度条
  • HTML5实现上传文件显示进度的代码分享
    这篇文章主要介绍“HTML5实现上传文件显示进度的代码分享”,在日常操作中,相信很多人在HTML5实现上传文件显示进度的代码分享问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”...
    99+
    2024-04-02
  • JavaWeb项目实现文件上传动态显示进度实例
    很久没有更新博客了,这段时间实在的忙的不可开交,项目马上就要上线了,要修补的东西太多了。当我在学习JavaWeb文件上传的时候,我就一直有一个疑问,网站上那些博客的图片是怎么上传的,因为当提交了表单之后网页就跳转了。后来我学习到了Ajax,...
    99+
    2023-05-31
    java 上传 进度条
  • vue+Minio实现多文件进度上传的详细步骤
    目录背景实现方案了解一下Mino实现步骤1.创建存储桶2.选择文件3.创建上传队列4.开始上传5 上传完成后,同步文件地址给后端6.删除文件完整代码源码分享总结背景 最近突然接到了一...
    99+
    2024-04-02
  • HTML5+Ajax文件上传进度条怎么实现
    这篇文章主要介绍了HTML5+Ajax文件上传进度条怎么实现,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。原本打算使用jquery插件进行异...
    99+
    2024-04-02
  • php上传大文件进度条怎么实现
    要实现PHP上传大文件的进度条,可以使用以下步骤:1. 在HTML中创建一个文件上传表单,设置`enctype="multipart...
    99+
    2023-10-11
    php
  • vue文件批量上传及进度条展示的实现方法
    目录主要实现功能上传初始化逻辑uploadStore()multiUpload() multiRun()uploadAsync(fileInfo)总结主要实现功能 1.多文...
    99+
    2022-12-24
    vue实现批量上传 vue 多文件上传 vue进度条样式
  • Ajax中怎么实现文件上传带进度条
    这篇文章将为大家详细讲解有关Ajax中怎么实现文件上传带进度条,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。(1)创建上传对象在应该Common-FileU...
    99+
    2024-04-02
  • 怎么用Springboot+vue实现图片上传至数据库并显示
    今天小编给大家分享一下怎么用Springboot+vue实现图片上传至数据库并显示的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下...
    99+
    2023-07-06
  • Android怎么实现app上传文件进度条转圈
    在Android应用中实现上传文件进度条转圈可以通过以下步骤实现: 创建一个布局文件,用于显示上传文件进度条和转圈动画。可以使用...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作