记录基于elementUI一个自定义上传图片的小功能

第一幕

使用elementUI做只能上传一张图片上传图片功能按钮的时候发现,普通的默认上传无法正确支持支持正确请求接口完成图片的上传,于是决定使用自定义上传的方式…

// 主要代码
<el-upload size="small" class="upload-demo" action="#" :headers="uploadProHeader" 
:http-request="handleMiniUpload" 
:before-upload="beforeMiniUpload" 
:on-remove="deleteMiniproImg" 
:on-change="uploadMiniChange" list-type="picture">
<el-button size="small" type="primary">点击上传</el-button>
<div slot="tip" class="el-upload-tip el-upload-tip--small">
请上传小于2MB的png/jpg/jpeg图片,建议尺寸520*416
</div>
 </el-upload>
 ......
 methods: {
 // 图片格式进行校验提示,大小不能超过2M
 beforeMiniUpload (file) {
      const types = ['image/jpeg', 'image/jpg', 'image/png']
      const testmsg = types.includes(file.type)
      const isLt10M = file.size < 1024 * 1024 * 2
      if (!testmsg) {
        this.$message.error('上传图片格式不支持!')
        return false
      }
      if (!isLt10M) {
        this.$message.error('上传图片大小不能超过2MB!')
        this.deleteMiniproImg()
        return false
      }
    },
 // 做上传动作,取得上传成功后接口返回的数据
 handleMiniUpload (params) {
      const file = params.file
      var formData = new FormData()
      formData.append('file', file)
      serviceMessageApi.uploadImg(this.$route.params.appid, formData).then(res => {
        if (+res.code === 0) {
          ...... // 取得接口我们所需要的数据
        }
      })
    },
 // 删除图片之后把对应数据删除
 deleteMiniproImg () {
      ...
    },
 }

第二幕

做完这些发现,当用户上传一张图片后,如果想再传一张图片,依然能够上传成功,并显示在页面上,尽管这样存储的是最后一次上传的图片,但是这样用户的使用体验感很差,这可不行丫!
在这里插入图片描述
第三幕

该怎么办呢?这必须要把存储图片文件做一个限制丫~ 翻开elementUI开发文档后,发现了limit这个组件参数

于是添加关键字limit=“1”,对图片上传进行了限制

可是这样问题真的解决了嘛?

第四幕

答案是否定的,虽然但是,这样并不能解决问题。于是拿出了必杀技

uploadMiniChange (file, fileList) {
  if (fileList.length > 1) {
    fileList.splice(0, 1)
  }
}

终于,this bug 被KO~~.

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Element UI 中,可以使用 el-upload 组件来实现图片功能。要自定义方法,可以使用自定义组件方法。下面是一个示例代码: ```vue <template> <div> <el-upload :action="uploadUrl" :on-success="handleSuccess" :on-error="handleError" :before-upload="beforeUpload" :limit="1" :auto-upload="false" > <el-button slot="trigger" size="small" type="primary">选择文件</el-button> <el-button size="small" type="success" @click="upload">上</el-button> <div slot="tip" class="el-upload__tip">只能上jpg/png文件,且不超过2MB</div> </el-upload> </div> </template> <script> export default { data() { return { uploadUrl: '/api/upload', fileList: [], }; }, methods: { beforeUpload(file) { const isJPG = file.type === 'image/jpeg'; const isPNG = file.type === 'image/png'; const isLt2M = file.size / 1024 / 1024 < 2; if (!isJPG && !isPNG) { this.$message.error('只能上jpg/png文件!'); return false; } if (!isLt2M) { this.$message.error('文件大小不能超过2MB!'); return false; } return true; }, handleSuccess(response, file, fileList) { // 处理上成功的逻辑 console.log(response); this.fileList = fileList; }, handleError(error, file, fileList) { // 处理上失败的逻辑 console.log(error); this.fileList = fileList; }, upload() { // 手动触发上 this.$refs.upload.submit(); }, }, }; </script> ``` 在上述代码中,`uploadUrl` 是上图片的接口地址,你需要根据实际情况修改。`beforeUpload` 方法用于在上之前进行文件类型和大小的校验。`handleSuccess` 和 `handleError` 方法分别用于处理上成功和失败的逻辑。`upload` 方法用于手动触发上。 你可以根据实际需求对这个示例进行修改和扩展,以满足你的自定义方法的需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值