element上传多个图片

在element中给出的图片上传例子其实都是上传完后自动提交,博主在写的时候遇到了很多坑。
在这里插入图片描述

1、先说下element中图片上传的一些要点

1、想要实现多图片上传一定要标注multiple属性、而且一定要是自己手动实现上传功能、这里有两个方法:
(1)通过配置file-list,即获取file-list中上传的文件然后封装到FormData()中,最后调用axios传递formData数据到后台
(2)重写http-request="uploadFile"方法,重写了这个方法后调用’this.$refs.upload.submit(),就会自动调用你重写的http-request=""方法,它会根据你上传的图片个数循环调用多少次。如你上传了两张,调用’this.$refs.upload.submit()后内部会自动调用两次http-request=""方法。这样我们在http-request=""方法中设置this.fileList.append(‘file’, item.file)就能将文件封装进一个list中,然后再封装进formData。最后调用axios即可。
注意: 上面两种方法,使用方式是一样的,都是自己封装好一个FormData,然后调用axios,而且axios传递数据一定是data:yourData样式的,千万不要自讨苦吃这样写query:youData

2、element图片组件是默认上传的,添加属性auto-upload="false"后才能关闭。也只有关闭了自动提交后、才能实现手动提交

3、element图片组件自动上传如果没有手动封装FormData数据然后调用axios,即使添加了multiple属性可以上传多个,element图片组件只会是一个图片发送一个请求的,而并非是一个请求多个图片

4、调用this.$refs.upload.submit(),element图片组件会使用默认的上传方式上传文件 如果重写了http-reques方法,那么久会调用http-reques方法,默认上传和’this.$refs.upload.submit()'请求url都是element图片组件上绑定的action,只有自己调用axios才不会使用到这个action

5、如果想要一个请求上传多个图片并附带参数、只能使用formData.append("你的属性名",属性值)的方式,使用formData.append("实体类名",this.form)是无法成功传数据的

6、关闭自动上传后调用this.$refs.upload.submit()才能生效,默认上传请求url都会是element图片组件上绑定的action,自动上传都是自己调用axios上传的

(1)


<el-upload accept="image/*" style="display: inline-block;"
	multiple 
	:file-list="fileList"
    :on-change="fileChange" 
    :on-remove="fileRemove" 
    :auto-upload="false" >
    
   <el-button type="primary" plain>
      <i class="el-icon-upload el-icon--right"></i>点击选择图片
   </el-button>
</el-upload>
<el-button type="success" plain @click="submitUpload">确认上传</el-button>
  //检测文件变动获取文件
  fileChange(file, fileList) {
    this.fileList = fileList;
  }
  //检测文件删除
  fileRemove(file, fileList) {
    this.fileList = fileList;
  }
  //手动上传图片
  submitUpload() {
    console.log("this.fileList", this.fileList)
    let formData = new FormData();  //  将文件封装进FormData
    this.fileList.forEach(file => {
      formData.append('file', file.raw)
    })
 	formData.append("属性名",“你想附带的数据”) //附带数据
    // 调用上传接口
    importFile(formData).then((res) => {
      //手动上传无法触发成功或失败的钩子函数,因此需要手动调用 
      this.upSuccess(res)
    }, (err) => {
      this.upError(err)
    })
  }

(2)

<el-upload accept="image/*" style="display: inline-block;"
	multiple 
	:file-list="fileList"
    :on-change="fileChange" 
    :on-remove="fileRemove" 
    :auto-upload="false" >
    
   <el-button type="primary" plain>
      <i class="el-icon-upload el-icon--right"></i>点击选择图片
   </el-button>
</el-upload>
  uploadFile(file) { 
	this.fileList.append('file', file.file)
  }
  // 上传图片
  submitUpload() {  
	 let formData = this.filedata
	 this.fileList = new FormData()  //  将文件封装进FormData
	 this.$refs.upload.submit()  // 依据图片个数循环调用uploadFile方法
	 fileList.append("属性名",“你想附带的数据”) //附带数据
	 //调用axios上传文件
	 importFile(this.fileList ).then((res) => { 
	 //手动上传无法触发成功或失败的钩子函数,因此需要手动调用 
	 this.updataSuccess(res.data) 
	 }
  }


	

2、参考博文

element多图片上传 https://www.jianshu.com/p/83a9e95dc54a?utm_campaign=haruki

element-plus 是一款基于 Vue.js 的组件库,可以方便地实现多个图片上传功能。 首先,我们需要在项目中安装并引入 element-plus 组件库。可以通过 npm 或者 yarn 进行安装,然后在项目的主文件中引入 element-plus 的样式文件和所需的组件,例如: ```js import { ElUpload, ElButton } from 'element-plus'; import 'element-plus/lib/theme-chalk/index.css'; ``` 接下来,在 Vue 组件中使用 ElUpload 组件来实现图片上传。我们可以使用 v-for 指令循环渲染多个上传区域,每个区域都有一个独立的上传按钮和对应的图片显示区域。可以在模板中插入以下代码: ```html <template> <div> <div v-for="uploadItem in uploadItems" :key="uploadItem.id"> <el-upload class="upload" :action="uploadItem.action" :limit="uploadItem.limit" :on-success="handleUploadSuccess" > <el-button size="small" type="primary">选择图片</el-button> </el-upload> <div class="image-list"> <img v-for="url in uploadItem.imageList" :key="url" :src="url" /> </div> </div> </div> </template> ``` 在 data 中定义一个数组 uploadItems,用来存储每个上传区域的相关配置信息,包括上传地址、上传限制等。可以在 created 钩子函数中初始化 uploadItems 数组: ```js export default { data() { return { uploadItems: [ { id: 1, action: '/upload', limit: 3, imageList: [] }, { id: 2, action: '/upload', limit: 5, imageList: [] }, // 可以根据需要继续添加更多的上传区域配置 ] }; }, // ... } ``` 最后,实现 handleUploadSuccess 方法,在上传成功后将图片的 URL 添加到对应的 uploadItem.imageList 数组中: ```js export default { // ... methods: { handleUploadSuccess(response, file, uploadItem) { uploadItem.imageList.push(response.url); } } } ``` 通过以上方法,在页面中就可以实现多个图片上传功能了。每个上传区域都独立管理自己的图片列表,方便实现一次性上传多个图片的需求。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值