天天看點

element-ui upload元件 實作多檔案上傳

需求:我司要求實作多檔案上傳,且要求使用formData傳遞參數。

環境:vue+element-ui+axios

實作:

1. 使用element-ui upload元件搭建上傳檔案頁面,頁面示例如下:

element-ui upload元件 實作多檔案上傳

代碼如下:

  <template> 

   <div> 

    <el-upload :multiple="true" class="upload-demo" action="" drag="" ref="upload" :on-change="handleImport" :auto-upload="false" :http-request="uploadFile" name="file"> 

     <i class="el-icon-upload"></i> 

     <div class="el-upload__text">

      将檔案拖到此處,或

      <em>點選上傳</em>

     </div> 

     <div class="el-upload__text">

      隻能上傳.xml檔案

     </div> 

    </el-upload> 

    <el-row :span="20"> 

     <el-col :guter="20" align="left" style="margin-top:20px;"> 

      <el-button size="small" type="primary" style="margin-right:10px;" @click="submitUpload">

       确定

      </el-button> 

      <el-button size="small" @click="handleCancel">

       取消

      </el-button> 

     </el-col> 

    </el-row> 

   </div> 

  </template>

2. data中設定兩個變量fileList3和fileData,其中fileList3用來存儲檔案清單、fileData用來将檔案追加到formData中

data() {

    return {

      fileList3: [],

      fileData:''

    };

  },

3. 引入axios

import axios from 'axios'

4. 定義方法

// 導入檔案時将檔案存入數組中

    handleImport(file, fileList) {

      this.fileList3 = fileList

    },

    // 點選上傳時覆寫預設上傳事件

    uploadFile:function(file){

      this.fileData.append('file', file.file);

    },

// 點選上傳按鈕

    submitUpload(params) {

      if(this.fileList3.length==0){

        this.$message.error('請選擇檔案')

        return 

      }

          this.fileData = new FormData();

          this.$refs.upload.submit();

          var that = this;

          axios({

              method:"POST",

              url: `你的接口位址`,

              data:that.fileData,

              contentType: false,//這裡不要落下

              dataType: 'json',

              headers: { "Content-Type": "multipart/form-data",token:getStore("token") ? JSON.parse(getStore("token")) : ""},//其他需要追加到請求頭的資訊也可放入這裡,我司需要追加一個token以做身份校驗,同時利用表單上傳Content-Type必須設定為multipart/form-data

          }).then((res)=>{

            let code =res.data.code

              if(code==200){

                this.$message({

                  message: '上傳成功',

                  type: 'success'

                });

              }else{

                this.$message.error(res.msg);

              }

          })

          .catch((response)=>{

            this.$message.error(response.msg);

          })

    }

5. 實作後的截圖如下:

element-ui upload元件 實作多檔案上傳
element-ui upload元件 實作多檔案上傳

6. 後端是java,springMVC,附上後端代碼

@OperationLog(operatorDesc = "上傳資料源檔案",moduleName = "資料源管理",isJsonFormat = false)
@RequestMapping("uploadFile")
public Object fileUpload(MultipartHttpServletRequest request){
    try {
        //擷取檔案集合
        Map<String, MultipartFile> fileMap = request.getFileMap();
        //判斷檔案是否為空
        if(fileMap == null || fileMap.size() == 0){
            return WebUtil.returnError("請上傳檔案");
        }
        Collection<MultipartFile> files = fileMap.values();
        initFileService.upLoadFile(files);
    } catch (Exception e) {
        String message = LogUtil.formatErrorMessage("上傳檔案失敗", e);
        super.log.error(message);

        return WebUtil.returnError("上傳檔案失敗");
    }
    return WebUtil.returnOk("success");
}
      

如果有問題可以聯系我哦:微信:lm13821687665,qq密碼已經找不到是以隻能放上微信了。

繼續閱讀