首页 > 其他分享 >el-upload拍照上传多个文件报错 ERR_UPLOAD_FILE_CHANGED问题

el-upload拍照上传多个文件报错 ERR_UPLOAD_FILE_CHANGED问题

时间:2024-06-13 20:11:34浏览次数:22  
标签:el ERR 文件 list upload 报错 file 上传

最近同事使用el-upload上传图片时出现一个问题,连续拍照多个图片的时候,循环调用接口上传会报错: ERR_UPLOAD_FILE_CHANGED,网上找了很多方案没有解决,下面是我自己的解决过程。

1. 问题描述

  • 我们用的套壳Android,网页发布在远程服务器,Android壳安装在ipad上
  • 前端用的组件是el-upload,点击后可以选择,拍摄图片上传
  • 选择,拍摄一个文件没有问题,选择多个文件也没有问题,就是拍摄多张图片点击保存的时候报错
  • 选择图片的时候监听el-upload组件的on-change方法得到文件列表uploadFiles
  • 拍摄多张图片的时候,点击提交,拿到文件列表,循环调用接口上传

2. 问题分析

打断点看到能够能够获取到文件列表,并且每次拍摄完都触发on-change事件,问题在从第二次后,uploadFiles数组中的最后一个是原生文件类型,其他都是代理(Proxy)类型,也是奇怪,如下图:
第一次
image

第二次
image

很明显第二次两个文件中的第一个是一个代理类型,不是纯文件类型

3.问题解决

个人猜想可能是拿这个Proxy对象调接口的时候,接口不能识别造成的,于是思路就有了,既然是Proxy类型,那就可以用toRaw方法来把它还原成原生的文件类型,关键代码如下:

<!-- 拍照上传 -->
<el-upload
  v-else-if="p.enforceShape == formShape.ELCAMERA"
  v-model:file-list="p.value"
  class="upload-demo"
  accept="image/*"
  :multiple="p.multiple"
  :on-remove="(file, list) => onUpload(p.prop, {file, list},'remove')"
  :on-change="(file, list) => onUpload(p.prop, {file, list},'change')"
  :auto-upload="false"
  list-type="picture">
  <el-button type="primary">上传图片</el-button>
</el-upload>
const onUpload = (prop, val, type) => {
  let list = []
  if (val.list.length > 0) {
    for (let i = 0; i < val.list.length; i++) {
      let file =  toRaw(val.list[i])
      list.push(file)
    }
  }
  emit('onUpload', prop, {list}, type)
}

最后这样问题就解决了。

3.总结

网上很多都是修改文件后,之前上传的文件已经不存在了,要把文件转成base64格式,上传的时候再转回来,这个对我这个问题不太适用。如下:
https://blog.csdn.net/qubes/article/details/129061173

标签:el,ERR,文件,list,upload,报错,file,上传
From: https://www.cnblogs.com/tylerdonet/p/18245324

相关文章

  • iperf报错broken pipe和bad file descriptiopn
    在进行iperf测试时,出现了两个错误:(1)iperf3:error-selectfailed:badfiledescriptor(2)iperf3:error-unabletosendconrolmessage:brokenpipe这两个错误都是在客户端出现的。根据iperf源码,分析了这两个错误的调用函数以及可能出错原因。1、iperf简介网络性能评估主......
  • 推荐一款纯前端类似excel的在线表格,功能强大,简单易用,完全开源(带私活源码)
    你曾经想过自己也能在网页上轻松地编辑表格,无需下载复杂的软件吗?现在有一款开源项目名为 Luckysheet 的在线表格工具,是一个强大的前端应用,类似于Excel。非常简单易用,完全开源。一、介绍Luckysheet,最新版名称Univer,一款纯前端类似excel的在线表格,功能强大、配置简单、完......
  • 推荐一个傻瓜级别的ElasticSearch搜索引擎开发框架,低代码很强大(带私活源码)
    背景众所周知,Elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎。其功能的强大我们无所质疑,但是其API的的使用可谓难倒了众多小白。为了解决大家使用门槛高的问题,今天给大家推荐一个开源的傻瓜级别的ElasticSearch搜索引擎开发框架:Easy-Es(简称EE)介绍官......
  • java:【@Import】和【ImportSelector】的简单示例
    #代码结构#项目【myBeanBranch】【pom.xml】<dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.2.15.RELEASE</version></dependency><dependency>......
  • PreconditionNotMetError: The third-party dynamic library (cudnn64_8.dll) that Pa
    下载paddle的时候,运行importpaddleprint(paddle.__version__)paddle.utils.run_check()如题所示的错误如果cuda、cudnn、paddlepaddle-gpu的匹配版本都没有错的话可能是因为电脑没有显卡驱动在这里填上你的电脑信息会自动找到适合你电脑的显卡驱动官方驱动|NVIDIA例如我......
  • Angular Material 18+ 高级教程 – Material Form Field
    介绍FormField或TextField是MaterialDesign独有的设计风格。它长这样注:MaterialDesign管它叫TextField,AngularMaterial管它叫FormField。我们不要乱,本篇统一叫FormField就好。顾名思义,Form代表表单,Field代表<fieldset>里的field。拿一个 W3Schools......
  • systemctl管理shell脚本开机自启动
    1.使用场景说明   如果想使用我们的systemctl管理shell脚本开机自启动,可以试试如下方法2.systemctl管理配置中#要使用systemctl开机启动的脚步路径ls/data/shell/SO/container_management.sh #配置systemctl管理文件[root@localhostSO]#cat/etc/systemd/system......
  • el-color-picker颜色取色器
    1.取色器基本样式elementUI中取Element-Theworld'smostpopularVueUIframework<el-color-pickerv-model="color1"></el-color-picker>原本样式2.修改样式成圆形::v-deep.el-color-picker{ .el-color-picker__color{ border-radius:50%; bo......
  • Spring Junit 测试报错 java.lang.IllegalStateException
    写测试代码的时候出现了java.lang.IllegalStateException:CouldnotloadTestContextBootstrapper[null].Specify@BootstrapWith's'value'attributeormakethedefaultbootstrapperclassavailable.代码如下:packagecom.example.service;importcom.example.c......
  • 在Django中使用Celery
    首先需要确保安装依赖pipinstallceleryrediseventlet在创建的app文件内添加tasks.py#app01/tasks.pyfromceleryimportshared_task@shared_taskdefsimple_task():print('Taskexecutedsuccessfully')在项目目录下(与settings.py文件同级)添加celery.py......