el-upload组件自定义上传无法正常显示本地图片

问题说明

在使用el-upload组件中通常会遇到请求不满足的情况或者需要接受参数,这时候我们就会用到自定义上传。而组件库在使用自定义上传的时候会覆盖默认的上传行为,导致我们不能对一些数据进行处理。

文件转base64

自定义图片上传方法,文件参数信息

使用自定义方法上传时,文件参数信息

文件信息
除了文件信息,还有一些方法参数

解决

使用自定义方法参数信息中的参数对象

	// 图片上传
    httpUpload (context) {
      // 监听上传成功,执行成功的方法
      context.onSuccess(e => {})
      // 文件转base64,创建文件对象
      var reader = new FileReader()
      // 读取文件为DataURL
      reader.readAsDataURL(context.file)
      // load后,才可获取到文件信息
      reader.onload = (e) => {
        uploadFile({
          'image_base64': e.target.result
        }).then(({ data }) => {
          if (data.code === 200) {
            this.imageUrl = data.data.image_url
          }
        })
      }
      reader.onerror = function (error) {
        console.log('Error: ', error)
      }
    },
    // 点击文件列表中已上传的文件时的钩子
    handlePictureCardPreview (file) {
      this.dialogImageUrl = file.url
      this.dialogVisible = true
    },
    // 文件上传成功执行的方法
    handleAvatarSuccess (res, file) {
      this.showImg = URL.createObjectURL(file.raw)
    }
### 实现 `el-upload` 组件自定义上传 Excel 文件 为了实现通过 Element UI 的 `el-upload` 组件来定制化上传 Excel 文件,可以按照如下方式构建: #### HTML 部分 创建一个用于触发文件选择对话框的按钮,并指定接受的文件类型为 `.xlsx`, `.xls`。 ```html <template> <div class="upload-excel"> <el-upload ref="upload" :auto-upload="false" :on-change="handleChange" action="" accept=".xlsx, .xls" :limit="1" :file-list="fileList" :class="{ 'disUoloadSty': hideUploadButton }" > <el-button slot="trigger" size="small" type="primary">选取文件</el-button> <p v-if="!hideUploadButton && fileList.length === 0" style="margin-top:8px;">点击或拖拽Excel文件到此处</p> </el-upload> <el-button @click="submitUpload" style="margin-left: 10px;" type="success" plain>上传至服务器</el-button> </div> </template> ``` 上述模板中包含了两个主要部分:一个是用来触发文件选择器的按钮;另一个则是实际执行上传操作的按钮。这里还设置了当选择了文件之后不再显示默认的文字提示[^1]。 #### JavaScript/TypeScript 部分 接下来,在脚本里定义处理逻辑,包括改变事件处理器以及提交表单的方法。 ```javascript <script setup lang="ts"> import { ref } from 'vue'; // 假设这是你的Vue组合API环境下的代码 const upload = ref(null); let fileList = ref([]); let hideUploadButton = ref(false); function handleChange(file, fileList) { if (file.raw.type !== "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" && file.raw.type !== "application/vnd.ms-excel") { this.$message.error('仅支持.xlsx 或者.xls 格式的文件'); return; } // 清除之前的文件列表并更新新的状态 fileList.value = [file]; hideUploadButton.value = true; } async function submitUpload() { const formData = new FormData(); formData.append('excelFile', fileList.value[0].raw); try { await fetch('/api/upload/excel', { method: 'POST', body: formData, }); console.log('文件已成功上传!'); } catch(error){ console.error('上传失败:', error.message); } } </script> ``` 这段脚本实现了对文件类型的验证,并且只允许一次性的单一文件上传。一旦用户选定了有效的 Excel 文件,则会将其加入到待上传队列当中,并隐藏掉原有的上传按钮[^2]。 #### CSS 部分 最后是控制样式的CSS规则,这部分已经在提供的引用中有提及过,主要用于调整上传区域大小及隐藏上传按钮后的样式效果。 ```css <style scoped> .uoloadSty .el-upload--picture-card{ width:110px; height:110px; line-height:110px; } .disUoloadSty .el-upload--picture-card{ display:none; /* 上传按钮隐藏 */ } </style> ``` 此段样式确保了即使在不满足条件的情况下也能保持良好的用户体验界面设计。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值