vue+element ui 上传文件,显示的文件参数内容只有uid

2023-10-27

现象

使用elment uiel-upload组件上传文件,会导致上传的文件参数file里面只包含uid,没有其他信息

file : { uid : 52688455 }
其他参数:xxxx

过程

  1. 在网上查资料,首先发现,是没有设定content-type为 " multipart/form-data " 由于我是封装了请求的,统一设定axios的请求config,所以我将统一的config删除,然后在每个请求方法中都逐一设定了congfig,发现请求的content-type虽然改变,但是file的值还是只有uid,还是json形式的
    删除config
    请求的api
  2. 后面又想到,可以将文件转变成base64字符串,然后使用json的形式传递,但是这样会让前端和后端的工作量都增大(前端转base64,后端解码成文件),而且太麻烦了,不愿意做
  3. 最后发现,可以使用formData来进行参数和文件的传递
    FormData 会将文件自动转换成二进制流,并且将header中的Content-type编码类型被设为 "multipart/form-data",这种编码方式被用作文件传输提高传输效率,不再需要自己设定。如果不使用FormData ,手动设定Content-type编码类型,那么传输的文件将不是二进制,而是一个json的map集合,并且只存在uid

最后放上源码

1、组件代码

<el-dialog title="上传文件" :visible.sync="dialogFormVisible1" class="dia">
              <el-upload ref="upload"  class="upload-demo" drag
                action="https://jsonplaceholder.typicode.com/posts/" multiple
                :on-preview="handlePreview"
                :file-list="fileList" :limit="1"
                :on-exceed="exceed" :auto-upload="false"
                :http-request="handleHttpRequest" :on-change="handleChange"  >
	                <div>
	                	<i class="el-icon-upload"></i>
	                </div>
	                <div class="el-upload__text">
	                  将文件拖到此处,或<em>点击上传</em>
	                </div>
              </el-upload>
              <el-button
                style="margin-top: 20px"
                size="small"
                type="primary"
                @click="submitUpload"
                >上传到服务器</el-button
              >
        </el-dialog>

2、由于我在组件中使用了:auto-upload=“false”,所以我是自定义上传的,action请求地址是无效的,自定义axios请求

handleHttpRequest(param) {
      if(this.fileStatus == 200){
        var formData = new FormData();
        formData.append('file', param.file);
        formData.append('md5', this.mode.md5);
        formData.append('sha1', this.mode.sha1);
        formData.append('fileName', this.mode.fileName);
        formData.append('fileID', this.mode.fileID);
        formData.append('token', this.mode.token);
        formData.append('createTime', this.mode.createTime);
        formData.append('size', this.mode.size);
        getUpload(this.url, formData)
          .then((res) => {
            if (res.data.returnCode == 0) {
              this.dialogFormVisible1 = false;              
              this.init_1();
              this.fileList = null;
              return this.$message.success("上传成功");
            } else {
              this.dialogFormVisible1 = false;
              return this.$message.error(res.data.errMessage);
            }
          })
          .catch((err) => {
            this.dialogFormVisible1 = false;
            return this.$message.error("请求失败!");
          });
      }else if(this.fileStatus == 201 || this.fileStatus == 202){
        this.dialogFormVisible1 = false;
        return this.$message.success("上传成功");
      }else{
        this.dialogFormVisible1 = false;
        return this.$message.error("文件上传实际路径请求失败!");
      }
    },

3、点击提交

submitUpload() {
  this.$refs.upload.submit();
},

扩展 【Base64将文件转成字符串】

1、安装依赖

npm install --save js-base64
或者
cnpm install --save js-base64

2、使用

//在需要使用base64的组件中
let Base64 = require('js-base64').Base64;
const en = Base64.encode(file)//加密
const de= Base64.decode(en);//解密
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vue+element ui 上传文件,显示的文件参数内容只有uid 的相关文章

随机推荐

  • Django-Model层ORM(五)

    目录 一 数据库配置 setting py全局配置文件中 默认 sqlite3数据库 通过class创建一张表 二 使用mysql数据库 通过class创建数据库表 三 单表操作 添加操作一 实例化book对象调用save 函数 添加操作二
  • 操作系统期末总复习(题库)

    本文说明 本文以习题为主 每题标明对应的书本页面 并作出详细解析 大家可以对照复习 选择题章节并没按书本章节分 计算题和分析题无书本页面位置或详细解析 请大家自行找对应章节进行学习 祝大家都能通过考试 也希望大家点赞支持 操作系统期末总复习
  • Python中的 nonlocal 关键字

    在Python中 nonlocal 关键字用于在嵌套函数中引用外部 但不是全局 作用域的变量 nonlocal 可以使你在嵌套函数内部修改外层 非全局 作用域的变量 为了更好地理解 nonlocal 的作用 我们先看一个没有使用 nonlo
  • ELK6.8版本整合filebeat和kafka收集springboot日志

    一 系统流程图 二 统一springboot的日志格式 方便logstash 已中括号过滤用
  • FFmpeg学习笔记--FFplay播放控制、FFplay基本命令参数、FFplay高级命令参数

    目录 1 FFplay播放控制 2 FFplay命令参数 1 强制显示宽高 用于调整窗口大小 2 设置帧尺寸 仅适用于没有包含帧大小的视频 3 设置像素格式 4 以全屏模式启动 5 禁用音频 视频和字幕 6 设置开始播放的位置 7 设置播放
  • 本地离线安装node-sass

    在使用 vue admin template 作为模板进行项目开发时 其模板中自带的 node sass 版本不一定和我们本地的node 环境一致 且使用 npm i node sass s 重新安装 node sass 也会报各种莫名其妙
  • 【shell】shell之cut用法

    目录 即可即用 命令详细说明 即可即用 提取列的用awk命令更好用 示例1 截取pers文件内冒号分隔的字符串的第3列 命令 命令说明 d 使用冒号 作为域分隔符 f 3 取分隔后的第3列 示例2 取括号内的数值 you age is 19
  • Error:for nested data item, row-key is required.的解决方法

    一 问题描述 遇到这个问题 首先跟着网上的教程更改 去掉package json中的element ui 版本号前面 不行之后我以为是我的版本问题 换了版本之后 报的错误更多了 然后给
  • Pandas使用(二)--筛选出dataframe某列中含有特定元素的行

    Pandas使用 二 筛选出dataframe某列中含有特定元素的行 python复现excel function dataframe筛选数据 方法一 通过条件判断 筛选出tnode列等于31010600000122的行 list to d
  • ubuntu tesseract 调试总结

    1 下载 编译运行Leptonica 下载地址 http code google com p leptonica 版本号 1 69 包名 leptonica 1 69 tar gz依次输入命令 configure make make ins
  • 深入Android系统(十二)Android图形显示系统-2-SurfaceFlinger与图像输出

    createEventConnection 方法返回的是一个IDisplayEventConnection对象mEvents 接着通过IDisplayEventConnection对象的stealReceiveChannel 方法 该方法主
  • 浅谈 JavaScript 作用域

    一 什么是作用域 作用是对代码的一个读写操作 域是js能够实现的一个范围 在script标签中var的时候 其实是在最大的window上加了一个属性 如果在script中没有用var声明 而是直接赋值 那就是自动在window上加一个属性
  • 解决出现“CMake can not determine linker language for target”问题的方法

    今天来分享一个我在编写CmakeList文件曾遇到的一个错误 当我通过cmake进行生成Makefile文件时候出现了下面两个错误 错误提示信息 CMake Error CMake can not determine linker lang
  • ChaosBlade 项目指南:我是如何为社区贡献 Redis 故障场景

    01 Redis 新特性介绍 1 1 背景 Redis 实际使用过程中会存在一些故障演练需求 例如 模拟触发所有 key 过期的极端故障场景 模拟主动触发 Redis 内存淘汰策略释放内存场景等等 所以 根据以上故障演练需求 决定对 Cha
  • MathType7.4mac最新版本数学公式编辑器安装教程

    MathType7 4中文版是一款功能强大且易于使用的公式编辑器 该软件可与word软件配合使用 有效提高了教学人员的工作效率 避免了一些数学符号和公式无法在word中输入的麻烦 新版MathType7 4启用了全新的LOGO 带来了更多对
  • Boost asio的async_write函数

    Boost asio是一个异步网络通信的库 其中async write是一个比较常用的函数 但是 如果没有正确的使用 就可能会出现一些意想不到的潜在Bug 例如下面的代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 1
  • java ---学生信息管理系统

    Student 学生类 package 学生信息管理系统 学生类 public class Student 学号 private String sid 姓名 private String name 年龄 private String age
  • 不重装系统解决win10更新错误0x800f0922

    最近win10突然就不能更新了 一直提示无法完成更新 正在撤销更改 尝试了以下处理都无效 1 网络问题 2 net framework没有启用 3 sfc scannow 和 DISM exe Online Cleanup image Sc
  • 快速排序和堆排序算法的比较与详解

    快速排序 原理 1 通过partion函数将列表最左边的数归位 归位的这个数左边的数都是比他小的 右边都是比他大的数 2 通过partion函数递归 将每一个数归位 partion函数解读 关键问题 left
  • vue+element ui 上传文件,显示的文件参数内容只有uid

    现象 使用elment ui的el upload组件上传文件 会导致上传的文件参数file里面只包含uid 没有其他信息 file uid 52688455 其他参数 xxxx 过程 在网上查资料 首先发现 是没有设定content typ