IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> vue+element ui 上传文件,显示的文件参数内容只有uid -> 正文阅读

[JavaScript知识库]vue+element ui 上传文件,显示的文件参数内容只有uid

现象

使用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);//解密
  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-06-08 18:57:17  更:2022-06-08 18:57:59 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 16:43:52-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码