vue中el-upload上传多图片且携带参数,批量而不是一张一张的解决方案

现在前端基本不是vue技术栈就是react技术栈。

vue技术栈最常用的就是element-ui的ui框架了。

在项目中,我们经常会碰到这种需求:批量上传文件

element-ui 确实也为我们提供了<el-upload>这样的组件,同事也暴露了很多的属性和方法供我们使用。

但是很多人却碰到了这样的问题:项目需求是批量上传,但是为什么自己上传的时候,也成功了,但是却是一张一张上传的,这种上传方式有时候并不违背我们的需求,但有时又不是我们需要的。那么,怎么解决批量上传并携带参数呢,我这里写了一个demo,

可供大家参考:

复制代码

 1 <template>
 2   <div>
 3     <el-form>
 4       <el-form-item>
 5         <el-upload
 6           ref="upload"
 7           action="/as"
 8           multiple
 9           :http-request="handleUpload"
10           :auto-upload="false"
11           :limit="20">
12           <el-button size="small" type="primary">点击上传</el-button>
13           <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div>
14         </el-upload>
15       </el-form-item>
16       <el-form-item>
17         <el-button type="primary" @click="handlePush">发布</el-button>
18       </el-form-item>
19     </el-form>
20     
21   </div>
22 </template>
23 <script>
24 import axios from 'axios'
25 import { mapGetters } from 'vuex'
26 export default{
27   data() {
28       return {
29         files:[]
30       };
31     },
32   computed:{
33     ...mapGetters([
34       'taxno',
35       'username'
36     ])
37   },
38   methods: {
39     handleUpload(raw){
40       this.files.push(raw.file);
41     },
42     async handlePush(){
43       this.$refs.upload.submit() // 这里是执行文件上传的函数,其实也就是获取我们要上传的文件
44       let fd = new FormData();
45       fd.append('operator',this.username)
46       fd.append('reimment',"倪楚楚")
47       fd.append('deptname',"技术部")
48       fd.append('taxno',this.taxno)
49       this.files.forEach(function (file) {
50         fd.append('file', file, file.name); // 因为要上传多个文件,所以需要遍历一下才行
51         //不要直接使用我们的文件数组进行上传,你会发现传给后台的是两个Object
52       })
53       axios.post(process.env.BASE_API+'/file/moreFileUpload',fd).then(res=>{
54         if(res.data.status==='OK'){
55           console.log(res)
56         }
57       })
58     }
59   }
60 }
61 </script>

复制代码

因为<el-upload>的action属性是必须的,所以如果不用默认上传,这里随便设置一个字符串就可以了。

如果对携带的参数做校验,可以用表单校验。当校验通过了再调上传的接口就可以了。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
以下是使用Vue3的el-upload组件上传多张图片的示例代码: ```html <template> <el-upload class="upload-demo" action="/upload" :on-success="handleSuccess" :before-upload="beforeUpload" multiple :limit="3" :auto-upload="false" :file-list="fileList" > <el-button size="small" type="primary">点击上传</el-button> <div slot="tip" class="el-upload__tip">只能上传jpg/png文件,且不超过500kb</div> </el-upload> </template> <script> import { ref } from 'vue'; export default { setup() { const fileList = ref([]); const beforeUpload = (file) => { const isJPG = file.type === 'image/jpeg' || file.type === 'image/png'; const isLt500K = file.size / 1024 < 500; if (!isJPG) { this.$message.error('只能上传jpg/png文件'); } if (!isLt500K) { this.$message.error('文件大小不能超过500kb'); } return isJPG && isLt500K; }; const handleSuccess = (response, file) => { this.$message.success('上传成功'); // 处理上传成功后的逻辑 }; return { fileList, beforeUpload, handleSuccess, }; }, }; </script> ``` 在上述代码,我们使用了Vue3的`ref`函数来创建了一个响应式的`fileList`数组,于存储上传的文件列表。`beforeUpload`函数用于在上传之前进行文件类型和大小的校验,只有符合要求的文件才会被上传。`handleSuccess`函数用于处理上传成功后的逻辑,你可以在其进行图片压缩和合并为zip文件的操作。 请注意,上述代码的`action`属性需要根据你的实际情况进行修改,以指定上传文件的接口地址。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值