el-upload上傳檔案和表單一起提交+後端接收程式碼

小王寫部落格發表於2021-09-01

一、前言

我們在做前端時,會遇到這樣的需求,上傳Excel檔案,並且還要和填寫的表單資料,一起傳送.我們知道el-upload預設的是選中檔案後直接請求到後端的介面.現在就需要我們修改這種預設的上傳形式,和填寫完的form表單一起請求後端介面.

二、前端頁面展示

在這裡插入圖片描述

三、表單程式碼

     <el-dialog title="匯入源資料庫表單資訊" :visible.sync="dialogVisible1">
      <el-form ref="importFormRef" :model="importForm" :rules="importFormRules" label-width="130px">
        <el-form-item label="病種kgCode:" prop="kgCode" >
          <el-input v-model="importForm.kgCode" ></el-input>
        </el-form-item>
        <el-form-item label="目標資料庫URL:" prop="targetUrl" >
          <el-input v-model="importForm.targetUrl"></el-input>
        </el-form-item>
        <el-form-item label="目標資料庫賬號:" prop="targetUsername" >
          <el-input v-model="importForm.targetUsername"></el-input>
        </el-form-item>
        <el-form-item label="目標資料庫密碼: " prop="targetPassword" >
          <el-input v-model="importForm.targetPassword"></el-input>
        </el-form-item>
        <el-form-item label="上傳檔案:" prop="excel">
          <el-upload
            class="upload-demo"
            ref="upload"
            action<!-- 這裡比填,非同步時寫後端介面,就可以,我們不用,所以不謝-->
            :http-request="httpRequest"<!--覆蓋預設的上傳行為,可以自定義上傳的實現-->
            :before-upload="beforeUpload"<!--這是上傳前的處理方法-->
            :on-exceed="handleExceed"<!--檔案超出個數限制時的鉤子-->
            :limit="1">
            <el-button slot="trigger" size="small" type="primary">選取檔案</el-button>
            <div slot="tip" class="el-upload__tip">只能上傳.xlsx檔案,且不超過5M</div>
          </el-upload>
        </el-form-item>
        <el-form-item>
          <el-button type="primary" @click="submitImportForm">開始匯入</el-button>
          <el-button type="info" @click="dialogVisible = false">關閉視窗</el-button>
        </el-form-item>
      </el-form>
    </el-dialog>

四、Data部分

     //對話方塊控制權
    dialogVisible1:false,
    //匯入表單資料
    importForm:{
      kgCode:'',
      targetUrl:'',
      targetUsername:'',
      targetPassword:'',
    },
    //存放上傳檔案
    fileList: []

五、JS方法

      // 覆蓋預設的上傳行為,可以自定義上傳的實現,將上傳的檔案依次新增到fileList陣列中,支援多個檔案
      httpRequest(option) {
        this.fileList.push(option)
      },
      // 上傳前處理
      beforeUpload(file) {
        let fileSize = file.size
        const FIVE_M= 5*1024*1024;
        //大於5M,不允許上傳
        if(fileSize>FIVE_M){
          this.$message.error("最大上傳5M")
          return  false
        }
        //判斷檔案型別,必須是xlsx格式
        let fileName = file.name
        let reg = /^.+(\.xlsx)$/
        if(!reg.test(fileName)){
          this.$message.error("只能上傳xlsx!")
          return false
        }
        return true
      },
      // 檔案數量過多時提醒
      handleExceed() {
        this.$message({ type: 'error', message: '最多支援1個附件上傳' })
      },
      //匯入Excel病種資訊資料
      submitImportForm() {
        // 使用form表單的資料格式
        const params = new FormData()
        // 將上傳檔案陣列依次新增到引數paramsData中
        this.fileList.forEach((x) => {
          paramsData.append('file', x.file)
        });
        // 將輸入表單資料新增到params表單中
        params.append('kgCode', this.importForm.kgCode)
        params.append('targetUrl', this.importForm.targetUrl)
        params.append('targetUsername', this.importForm.targetUsername)
        params.append('targetPassword', this.importForm.targetPassword)
		
		//這裡根據自己封裝的axios來進行呼叫後端介面
        this.httpPostWithLoading(IMPORT_URL,paramsData).then(match => {
          if (match.success) {
            this.$message({
              message: "匯入成功",
              type: "success"
            })
          }else{
            this.$message({
              message: "匯入失敗",
              type: "error"
            })
          }
          this.$refs.importFormRef.resetFields()//清除表單資訊
          this.$refs.upload.clearFiles()//清空上傳列表
          this.fileList = []//集合清空
          this.dialogVisible1 = false//關閉對話方塊

        })
      }

六、後端接收方式

    @PostMapping("/importExcel")
    public JsonResult importExcel(MultipartFile file, String kgCode, String targetUrl, 
    	String targetUsername, String targetPassword){
    }

七、總結

這樣就可以完成上傳的檔案和表單一起請求後端介面,解決了您的問題,一鍵三聯走起來!!!謝謝大家

相關文章