1.使用elementui上传组件
要做一个选择文件后,先不上传,等最后点击确定后,把file二进制流及附加参数一起提交上去。
首先使用elementui中的上传组件,设置auto-upload=false,也就是选择文件后不立刻上传。
 <el-upload
            ref="upload"
            :limit="1"
            accept=".wav, .mp3"
            :headers="upload.headers"
            :action="upload.url"
            :disabled="upload.isUploading"
            :on-progress="handleFileUploadProgress"
            :auto-upload="false"
            :on-change="fileChange"
            :on-remove="fileremove"
          >
            <el-button size="small" type="primary">选择文件</el-button>
          </el-upload> 
 // 用户导入参数
      upload: {
        // 是否显示弹出层(用户导入)
        open: false,
        // 弹出层标题(用户导入)
        title: "",
        // 是否禁用上传
        isUploading: false,
        // 是否更新已经存在的用户数据
        updateSupport: 0,
        // 设置上传的请求头部
        headers: { Authorization: "Bearer " + getToken() },
        // 上传的地址
        url: process.env.VUE_APP_BASE_API + "/audio/audioFileUpload",
      }, 
 
    // 文件更改
    fileChange(file, e) {
      console.log(file, e);
      this.dataForm.file = file.raw;
    },
    // 文件上传中处理
    handleFileUploadProgress(event, file, fileList) {
      this.upload.isUploading = true;
    },
    // 文件删除
    fileremove(file, fileList) {
      this.dataForm.file = null;
    }, 
在选择文件后获取到文件file流,把file.raw赋值给form中的rile
2.创建FormData
上传file二进制文件以及参数需要用到FormData
 let formData = new FormData();  //创建form对象
      formData.append("file", this.dataForm.file);  //file文件流参数
      formData.append("phoneNumber", this.dataForm.phoneNumber);//参数
      formData.append("callTime", this.dataForm.callTime);//参数
      formData.append("remark", this.dataForm.remark);//参数 
3.接口提交form对象,表单模式
需要在请求头设置accept和content-type,不然不行
 headers: {
      accept: "*/*",
      "Content-Type": "multipart/form-data;charset=UTF-8",
    }, 
设置完请求头后,接口提交为表单数据,file二进制的就可以了,如下图

如果未设置会是出现正常post提交的方式,如下图,所以一定要设置请求头格式



















![[网络安全] 滥用Azure内置Contributor角色横向移动至Azure VM](https://i-blog.csdnimg.cn/direct/bb95915fc47947d6958f46e6b6337ef4.png#pic_center)
