element ui 自定义文件上传二进字流传值问题

1.封装的post请求

复制代码
import axios from './axios.js' //引入axios文件
export function post (url, data) {
  return axios({
    method: 'post',
    url,
    data: {
      ...data
    }
  })
}

//修改后 正常了
export function post (url, data) {
  return axios({
    method: 'post',
    url,
    data: data
  })
}

2.api文件里面引用post封装请求

复制代码
import { post } from '@/axios' //引用axios

//上传文件接口
export function uploadFile(type, data) {
   return post(urlbase+'/user/prompt/upload/'+type,data)
}

3.上传文件组件

复制代码
<template>
    <div>
       <div class="upload" v-show="this.operation!=2">
       <el-button class="but" @click="downloadTemplate">下载导入模板</el-button>
        <el-upload
          :headers="headers"
          accept=".xls, .xlsx, .csv"
          :show-file-list='false'
          class="upload-demo"
          action="#"
          :on-error="uploadFied"
          :before-upload="beforeUploadxls"
          :file-list="fileList">
         <el-button size="small" type="primary">批量导入</el-button>
         <div v-show="!nums" slot="tip"  class="el-upload__tip">支持上传xls、xlsx、csv格式的文件,最大2M</div>
       </el-upload>
       </div>
       <div v-show="this.fielId">
           <ul class="el-upload-list el-upload-list--text" style="position: relative;width: 200px;left:0px;">
            <li tabindex="0" class="el-upload-list__item is-success">
              <a class="el-upload-list__item-name">
                <!-- <i class="el-icon-document"></i> -->
              {{this.fileNmae}}</a>
              <label class="el-upload-list__item-status-label"><i
                class="el-icon-upload-success el-icon-circle-check"></i></label>
              <i  @click="handleRemove" class="el-icon-close"></i>
              <i class="el-icon-close-tip">按 delete 键可删除</i></li>
            </ul>
             <span style="color: darkorange;">导入成功{{this.nums}}条,<span @click="downloads" :disabled='false' style="color: #409EFF;">查看上传结果</span></span>
       </div>
    </div>
</template>

<script>
import {uploadFile,} from '../api/user'

export default {
    props:['value',"num","types","operation"],
   data(){
    return{
     fielId:this.value,
     fileList:[],
     loading:false,
     fileNmae:'',//文件名称
     nums:'',//成功条数
    }
   },
   watch: {
    value(newValue) {
      // console.log('newValue',newValue);
      this.fielId = newValue;
    }
   },
   methods: {
    //上传前验证格式
    beforeUploadxls(file) {
      console.log('file',file);
      const extension = file.name.split(".")[1] === "xls" || file.name.split(".")[1] === "xlsx" || file.name.split(".")[1] === "csv";
      const isSize = file.size / 1024 / 1024 > 2;
     if (!extension) {
        this.$message.warning("文件格式有误!");
        return false;
      }
     if(isSize){
        this.$message.warning("上传文件大小不能大于2M!");
        return false;
     }
     this.loading = this.$loading({
        lock: true,
        text: "上传中",
        spinner: "el-icon-loading",
        background: "rgba(0, 0, 0, 0.7)",
      });
      console.log(111,this.fileList);
      let formdata = new FormData();
      formdata.append("template",file);
      console.log('formdata-file', formdata.get('file'));

      uploadFile(this.types,formdata).then(res=>{
        let {fileId,succeedLine}=res.data
        if(res.code==200){
          this.$message.success(res.message)
          //上传成功赋值
          this.fileNmae=file.name
          this.nums=succeedLine
          this.$emit("input", fileId)
        }else{
          this.$message.error(res.message)
        }
        this.loading.close()
      }).catch((err)=>{
        this.loading.close()
      })
    },
    //查看上传结果
    downloads(){
      
    },
    //下载模板
    downloadTemplate(){
      let a = document.createElement("a");
      a.href = "./template/TipTemplate.xlsx";
      // a.download = "导入模板.xlsx";
      a.style.display = "none";
      document.body.appendChild(a);
      a.click();
      a.remove();
    },
    //删除
    handleRemove(file, fileList){
      console.log('删除');
      this.fielId=''
      this.$emit('input', '')
    },
    //上传失败
    uploadFied(err, file, fileList){
      console.log('失败');
      this.loading.close()
    }
   },
   created() {

   },
   computed:{
     
   }
}
</script>

<style lang="less" scoped>
  .upload{
    display: flex;
    .but{
        height: 33px;
        margin-right: 10px;
    }
    .el-upload__tip{
       position: relative;
       right: 116px;
    }
  }
</style>

导致文件流获取值一直传不到后端,解决办法修改post请求,data写法

相关推荐
zlpzlpzyd3 分钟前
vue.js 2和vue.js 3的生命周期与对应的钩子函数区别
前端·javascript·vue.js
无限进步_6 分钟前
C语言宏的魔法:探索offsetof与位交换的奇妙世界
c语言·开发语言·windows·后端·算法·visual studio
代码雕刻家8 分钟前
C语言关于换行符的注意事项
c语言·开发语言
认真敲代码的小火龙24 分钟前
【JAVA项目】基于JAVA的图书管理系统
java·开发语言·课程设计
爱敲代码的小冰24 分钟前
js 时间的转换
开发语言·前端·javascript
缘三水25 分钟前
【C语言】14.指针(4)
c语言·开发语言·指针·语法
电子_咸鱼30 分钟前
【QT SDK 下载安装步骤详解 + QT Creator 导航栏使用教程】
服务器·开发语言·网络·windows·vscode·qt·visual studio code
AAA阿giao30 分钟前
深入理解 JavaScript 中的面向对象编程(OOP):从构造函数到原型继承
开发语言·前端·javascript·原型·继承·原型模式·原型链
2301_7973122631 分钟前
学习Java22天
java·开发语言
jllllyuz38 分钟前
MATLAB雷达系统设计与仿真
开发语言·matlab