edu/uniapp/src/utils/imageUtils.ts

73 lines
2.1 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* 图片处理工具类
* 用于统一处理从阿里云或其他存储服务获取图片的逻辑
*/
import request from '@/utils/request'
/**
* 获取阿里云存储的图片URL
* @param imageKey 图片在阿里云上的key
* @returns 图片的完整URL
*/
export function getAliyunImageUrl(imageKey: string): string {
// 从配置中获取阿里云基础URL如果配置不存在则返回原路径
const config = uni.getStorageSync('storageConfig') || {}
const baseUrl = config.aliyunBaseUrl || config.baseUrl || ''
if (baseUrl && imageKey) {
// 确保URL格式正确
const normalizedBaseUrl = baseUrl.endsWith('/') ? baseUrl : baseUrl + '/'
return normalizedBaseUrl + imageKey
}
// 如果没有配置,则返回原始图片路径(本地路径)
return imageKey
}
/**
* 通过API获取图片URL
* @param teacherId 教师ID
* @returns 二维码图片的URL
*/
export async function getTeacherQrCodeUrl(teacherId: number): Promise<string> {
try {
const response = await request.get(
{ url: `frontapi/teacher/qrcode?id=${teacherId}` },
{ urlPrefix: '', isTransformResponse: false }
)
if (response && response.code === 1 && response.data) {
return response.data
}
console.error('获取教师二维码URL失败:', response)
return ''
} catch (error) {
console.error('获取教师二维码URL异常:', error)
return ''
}
}
/**
* 通用图片加载错误处理
* 当阿里云图片加载失败时,回退到本地图片
* @param imageUrl 阿里云图片URL
* @param localImagePath 本地图片路径
* @returns Promise<string> 确定使用的图片路径
*/
export async function loadImageWithFallback(
imageUrl: string,
localImagePath: string
): Promise<string> {
if (!imageUrl) return localImagePath
return new Promise((resolve) => {
// 尝试加载网络图片
const image = new Image()
image.onload = () => resolve(imageUrl)
image.onerror = () => resolve(localImagePath)
image.src = imageUrl
})
}