Element-plus upload带参数上传图片

前言

技术栈:Vue3 + Ts + Element-plus

一、需求描述

除了将图片上传到后端的指定接口,还需要在上传时携带后端规定的参数

二、详细使用

/src/components/Upload/index.vue 全量代码如下

<script lang="ts" setup>
import { ref } from 'vue'
import { ElMessageBox, type ElUpload } from 'element-plus'
import { fetchUploadImage } from '@/api/upload'
import { CirclePlus } from '@element-plus/icons-vue'

// 文件上传前触发-限制上图图片的大小和格式
const handleBeforeUpload = (file: any) => {
  // 拿到文件后缀名
  const fileType = file.name.substring(file.name.lastIndexOf('.') + 1)
  const isJpg = fileType === 'jpg'
  const isPng = fileType === 'png'
  const isJpeg = fileType === 'jpeg'
  // 根据后缀名判断文件类型
  if (!isJpg && !isPng && !isJpeg) {
    alert('只能上传图片和pdf格式的文件!')
    return false
  }
  const isLt1M = file.size / 1024 / 1024 < 2
  // 可以限制图片的大小
  if (!isLt1M) {
    alert('上传图片大小不能超过 2MB!')
  }
  return isJpg || isPng || isJpeg
}

// 文件超出上传限制 此方法是和:limit绑定的
const handleExceed = () => {
  ElMessageBox.alert('只能上传一个文件,如有需要请删除上一个文件再进行上传', '温馨提示', {
    confirmButtonText: '确定'
  })
}

// 获取 upload 组件ref
const uploadRef = ref<ComponentRef<typeof ElUpload>>()
const imgUrl = ref('null')
// 事件
const emit = defineEmits(['uploadImageSucceeded'])
// 上传文件方法
const uploadImage = async (file: any) => {
  const formData = new FormData()
  const flag = props.flag
  formData.append('file', file.file)            // 根据后端文档,我需要传递file 和 flag 两个参数
  formData.append('flag', flag.toString())      // 根据后端文档,我需要传递file 和 flag 两个参数
  const res = await fetchUploadImage(formData)  // 调用接口,将我们准备好的参数传递过去
  imgUrl.value = res.data
  clearFiles()
}

// 触发清空上传列表事件
const clearFiles = () => {
  // 清空已上传的文件列表(该方法不支持在 before-upload 中调用)
  uploadRef.value?.clearFiles()
}

// 将清空方法暴露出去,供父组件调用
defineExpose({
  clearFiles
})
</script>
<template>
  <div class="file-upload">
    <el-upload
      ref="uploadRef"
      accept="image/jpg,image/jpeg,image/png"
      action=""
      :before-upload="handleBeforeUpload"
      :limit="1"
      :http-request="uploadImage"
      :show-file-list="false"
      :auto-upload="true"
      :on-exceed="handleExceed"
      name="file"
    >
      <el-icon class="avatar-uploader-icon">
        <CirclePlus />
      </el-icon>
      <div class="upload-text">点击上传</div>
    </el-upload>
  </div>
</template>

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
element-plus的upload组件可以用于上传图片。根据引用的代码,上传单个图片的示例代码如下: ```javascript <el-form-item label="图片" prop="image"> <el-upload class="dl-avatar-uploader-min square" :action="uploadUrl" :show-file-list="false" :on-success="handleUpImage" :before-upload="beforeImageUpload" list-type="picture" accept="image/*"> <el-image v-if="addform.image" :src="addform.image" class="avatar"></el-image> <i v-else class="el-icon-plus avatar-uploader-icon"></i> <template #tip> <div class="el-upload__tip">只能上传图片,且单张图片大小不能超过10MB</div> </template> </el-upload> </el-form-item> ``` 如果需要上传多张图片,可以参考引用提供的链接,其中包含了基于element-ui的upload组件的预览和删除功能。 另外,如果你想要使用element-plus的upload组件上传单个文件(仅限pdf格式),可以参考引用提供的代码: ```html <el-upload :file-list="fileList" class="upload-demo" action="接口" multiple v-model="ruleForms.upload" accept=".pdf" :before-upload="changeFiles" :on-change="handleChanges"> <el-button type="primary">选择文件</el-button> <template #tip> <div class="el-upload__tip">仅允许上传一个文件,仅限pdf格式</div> </template> </el-upload> ``` 这个代码将允许用户选择单个pdf文件进行上传。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [vue3 + elementPlus 上传图片](https://blog.csdn.net/thingir/article/details/124802295)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [基于element-ui 使用 upload 预览图片 (含删除功能)](https://download.csdn.net/download/qq_36437172/11601659)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [vue3中element-plus Upload上传文件](https://blog.csdn.net/m0_64397933/article/details/126689165)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

礼貌而已

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值