import { axios } from '@/request' import { uploadFile } from '@/request/urls' import { ElMessage } from 'element-plus' /** * 上传文件的公共方法 * @param file - 要上传的文件 * @param onProgress - 上传进度回调函数 * @returns Promise<{url: string, fileName: string}> 返回上传成功后的文件信息 */ export const uploadFileToServer = async ( file: File, onProgress?: (progressEvent: any) => void ): Promise<{url: string, fileName: string}> => { try { const formData = new FormData() formData.append('file', file) const response = await axios({ url: uploadFile, method: 'POST', data: { file }, onUploadProgress: onProgress }) if (response.code === 0 || response.code === '000000' || response.code === 200) { return { url: response.data?.url || response.data, fileName: file.name } } else { throw new Error(response.msg || '上传失败') } } catch (error) { console.error('文件上传失败:', error) ElMessage.error('文件上传失败') throw error } } /** * 将Canvas转换为Blob对象 * @param canvas - Canvas元素 * @param quality - 图片质量(0-1) * @param format - 图片格式 * @returns Promise */ export const canvasToBlob = ( canvas: HTMLCanvasElement, quality: number = 0.8, format: string = 'image/jpeg' ): Promise => { return new Promise((resolve, reject) => { canvas.toBlob( (blob) => { if (blob) { resolve(blob) } else { reject(new Error('Canvas转换为Blob失败')) } }, format, quality ) }) } /** * Blob转换为File对象 * @param blob - Blob对象 * @param fileName - 文件名 * @returns File对象 */ export const blobToFile = (blob: Blob, fileName: string): File => { return new File([blob], fileName, { type: blob.type }) }