ElementUI的upload组件手动上传,并携带参数和excel文件流提交给后台

使用场景:

选取好excel文件后,再把导入的excel文件和参数同时提交给服务器,需要用到文件的手动上传,但是直接拷贝官网的demo会出现问题,下面会具体说明要注意的问题点。😏

 

直接上代码:

index.vue

<el-form ref="importList" :rules="ImportRules" :model="importList" label-position="left" label-width="100px"
               style="width:70%;margin-left:50px;">
        <el-form-item label="平台号:" prop="platNum">
          <el-input v-model="importList.platNum" clearable maxlength="50" placeholder="请输入平台号" size="mini"  style="width: 90%"/>
        </el-form-item>
        <el-form-item label="任务名称:" prop="taskName">
          <el-input v-model="importList.taskName" clearable maxlength="50" placeholder="请输入任务名称" size="mini"  style="width: 90%"/>
        </el-form-item>
        <el-form-item label="Excel文件:" prop="file">
          <el-upload
            class="upload-demo"
            ref="upload"
            multiple
            accept=".xls"
            action=""
            :with-credentials="true"
            :http-request="httpRequest"
            :on-preview="handlePreview"
            :on-remove="handleRemove"
            :on-change="fileChange"
            :on-success="upFile"
            :file-list="fileList"
            :data="getUploadList"
            :auto-upload="false">
            <el-button slot="trigger" size="small" type="primary">选取文件</el-button>
            <div slot="tip" class="el-upload__tip" style="display: inline-block;margin-left: 20px">只能上传xls格式的 excel文件</div>
          </el-upload>
        </el-form-item>
</el-form>

<div slot="footer" class="dialog-footer">
        <el-button @click="cancelFinishPlatform">取消</el-button>
        <el-button style="margin-left: 10px;" type="success" @click="submitUploadList">上传到服务器</el-button>
</div>

 

 

// param是自带参数。 this.$refs.upload.submit() 会自动调用 httpRequest方法.在里面取得file
httpRequest(param) {
  console.log(param)
  let fileObj = param.file // 相当于input里取得的files
  let fd = new FormData()// FormData 对象
  fd.append('file', fileObj)// 文件对象
  fd.append('platNum', this.importList.platNum)
  fd.append('taskName', this.importList.taskName)

  let url = process.env.CMS1_BASE_API + 'cdnDel/uploadExcel'
  let config = {
    headers: {
     'Content-Type': 'multipart/form-data'
    }
  }
  axios.post(url, fd, config).then(res=>{
   if(res.code===0){
     this.submitForm();//提交表单
   }
  })
}

手动上传的话,action 可以不用关注咯。

:auto-upload="false" 设置为flase ,为手动上传。

 

⚠️upload组件注意点:

 

1. 选取好文件后,如何触发上传到服务器的操作呢?

我们可以使用官网提供的 submit() 方法

this.$refs.upload.submit();

但是要注意执行submit方法后,他会触发upload组件中的 http-request ,而 httpRequest 这个方法是需要你自己去定义的,实例请见上面👆的代码,亲测可用。

:http-request="httpRequest"

官网定义如下:

 

2. 注意在增加文件和删除文件时,对 :file-list 上传的文件列表进行相应的增减

<el-upload
     :on-remove="handleRemove"
     :on-change="fileChange"
     :file-list="dataList"
     :auto-upload="false">
      <el-button slot="trigger" size="small" type="primary">选取文件</el-button>
      <div slot="tip" class="el-upload__tip" style="display: inline-block;margin-left: 20px">只能上传xls格式的 excel文件</div>
</el-upload>

 


// fileList 是文件列表发生变化后,返回的修改后的列表对象,这里直接赋值就好啦!
fileChange(file, fileList) {
  // console.log(file.raw)
  this.dataList = fileList
},

on-change 是文件状态改变时的钩子,添加文件、上传成功和上传失败时都会被调用

 

3. 注意上传时,请求头要修改为 ‘multipart/form-data’ 

我们需要创建一个 FormData 对象,以表单的形式上传参数和excel文件

// param是自带参数。 this.$refs.upload.submit() 会自动调用 httpRequest方法.在里面取得file
httpRequest(param) {
  console.log(param)
  let fileObj = param.file // 相当于input里取得的files
  let fd = new FormData()// FormData 对象
  fd.append('file', fileObj)// 文件对象
  fd.append('platNum', this.importList.platNum)
  fd.append('taskName', this.importList.taskName)

}

4. 如果把提交函数用在http-request钩子中,fileList多长就执行请求多少次接口,依旧是无法做到只请求一次上传多文件

  • 46
    点赞
  • 194
    收藏
    觉得还不错? 一键收藏
  • 32
    评论
您好!以下是一个示例的后端接口方法,用于处理ExtJS上传.xls文件并返回上传后的文件路径: ```java import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; @RestController @RequestMapping("/api") public class FileUploadController { @PostMapping("/upload") public String uploadFile(@RequestParam("file") MultipartFile file) { try { // 检查文件类型,确保上传的是.xls文件 if (!file.getOriginalFilename().endsWith(".xls")) { return "只允许上传.xls文件"; } // 处理文件上传逻辑,保存文件到指定位置 String filePath = "/path/to/save/" + file.getOriginalFilename(); file.transferTo(new File(filePath)); return filePath; // 返回上传后的文件路径 } catch (Exception e) { e.printStackTrace(); return "上传失败"; } } } ``` 这是一个使用Spring Boot框架编写的Java后端接口方法。它监听`/api/upload`路径的POST请求,并接收一个名为`file`的MultipartFile参数,该参数用于接收上传文件。在方法内部,我们可以根据需要添加一些文件类型验证、异常处理等逻辑。最后,将文件保存到指定路径,并返回上传后的文件路径。 请注意,您需要根据实际需求修改文件保存路径`/path/to/save/`为您希望保存文件的实际路径。此外,还需要根据您的项目环境进行适当的配置和调整。 希望能对您有所帮助!如果您有任何问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 32
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值