element-plus的el-image跨域

一、文章参考

  1. element-plus的el-image跨域踩坑记录
  2. [Component] [image] 2.5.1版本 el-image组件存在跨域问题,使用原生image组件正常
  3. [Component] [image] Image 跨域问题

二、问题描述

在项目开发中,使用element-plus UI框架的 el-image 控件,目的是为了查看图片详情(原始图片),由于图片是存储在对象服务器上,控制台报错,提示跨域

三、解决办法

方法一:后端对图片做代理,将跨域变为相同的服务器即可

方法二:前端处理,解决组件的bug

  1. 可将element-plus升到2.5.3
{
	"element-plus": "2.5.3",
}
  1. 添加 :crossorigin=“null” 属性
<el-image
	style="width: 100%; height: 100%"
	:src="item.picUrl"
	:zoom-rate="1.2"
	:max-scale="7"
	:min-scale="0.2"
	:preview-src-list="[item.picUrl]"
	:initial-index="0"
	fit="contain"
	:crossorigin="null"
>
	<template #error>
	  <div class="image-slot">
		<el-icon><Picture /></el-icon>
	  </div>
	</template>
</el-image>
### Vue3 使用 Element-Plus 的 `el-upload` 实现文件上传 在 Vue3 中,使用 Element-Plus 提供的 `el-upload` 组件可以轻松实现文件上传功能。以下是基于提供的引用内容以及实际开发经验整理的一个完整的示例。 #### 基本配置 为了使 `el-upload` 正常工作,需要指定以下几个重要属性: 1. **`:action`**: 文件上传的目标 URL 地址。 2. **`:before-upload`**: 在文件上传前执行的操作函数,用于验证文件大小、类型等条件。 3. **`:on-success`**: 当文件成功上传后的回调函数。 4. **`:limit`**: 设置允许的最大文件数。 5. **`:headers`**: 配置请求头信息(如认证令牌)。 以下是一个综合示例代码片段[^1][^2]: ```vue <template> <div class="upload-container"> <!-- 图片上传组件 --> <el-upload :action="uploadUrl" :headers="headers" :limit="1" :before-upload="handleBeforeUpload" :on-exceed="handleExceed" :on-success="handleSuccess" :file-list="fileList" > <el-button type="primary">点击上传</el-button> <template #tip> <div class="el-upload__tip">仅支持单张图片上传,且不超过2MB。</div> </template> </el-upload> </div> </template> <script setup> import { ref } from 'vue'; import { ElMessage } from 'element-plus'; // 定义上传地址 const uploadUrl = ref('https://example.com/upload'); // 替换为你的服务器 API 地址 // 请求头部信息 const headers = { Authorization: 'Bearer your-token-here', // 可选:如果你的服务端需要身份验证 }; // 已上传文件列表 const fileList = ref([]); // 上传前校验逻辑 function handleBeforeUpload(file) { const isImage = file.type.startsWith('image/'); const isLt2M = file.size / 1024 / 1024 < 2; if (!isImage) { ElMessage.error('仅支持上传图片格式!'); } if (!isLt2M) { ElMessage.error('图片大小不得超过2MB!'); } return isImage && isLt2M; } // 超过最大文件数量时触发 function handleExceed() { ElMessage.warning('最多只能上传一张图片,请先移除已有文件再重新上传'); } // 成功上传后处理 function handleSuccess(response, file) { if (response.success) { ElMessage.success(`文件 ${file.name} 上传成功`); console.log('返回的数据:', response); } else { ElMessage.error('上传失败,请稍后再试'); } } </script> <style scoped> .upload-container .el-upload__tip { color: red; font-size: 12px; } </style> ``` --- #### 关键点解析 1. **限制上传文件的数量** - 属性 `:limit="1"` 表示一次只能上传一个文件。当尝试超出此限制时会调用 `on-exceed` 方法[^2]。 2. **自定义上传前校验** - 函数 `handleBeforeUpload` 是用来拦截并检查即将上传的文件是否满足特定条件(例如 MIME 类型和大小),如果不满足则终止上传过程。 3. **响应数据处理** - 在方法 `handleSuccess` 中接收服务端返回的结果,并根据业务需求进一步操作,比如保存到 Vuex 或者更新视图状态[^3]。 4. **动态设置上传路径与 Header** - 动态绑定 `:action` 和 `:headers` 参数能够灵活适应不同环境下的部署情况,尤其是涉及或者鉴权场景下非常有用。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值