import request from '@/utils/request' import config from '@/config' import { useUserStore } from '@/store/modules/user' const BASE_URL = config.baseUrl /** * 上传单个图片 * @param {File} file 图片文件 * @returns {Promise} */ export function uploadImage(file) { const formData = new FormData() formData.append('file', file) return request({ url: '/upload/image', method: 'post', data: formData, header: { 'Content-Type': 'multipart/form-data' } }) } /** * 上传多个图片 * @param {Array} files 图片文件数组 * @returns {Promise} */ export function uploadImages(files) { const formData = new FormData() files.forEach(file => { formData.append('files', file) }) return request({ url: '/upload/images', method: 'post', data: formData, header: { 'Content-Type': 'multipart/form-data' } }) } /** * uni-app 上传单个图片(使用 uni.uploadFile) * @param {String} filePath 本地文件路径 * @param {String} type 文件类型 image/video * @returns {Promise} */ export function uniUploadImage(filePath, type = 'image') { return new Promise((resolve, reject) => { // 使用pinia store获取token const userStore = useUserStore() // 检查登录状态 if (!userStore.isLogin) { reject(new Error('请先登录')) return } const token = userStore.token const endpoint = type === 'video' ? '/upload/video' : '/upload/image' console.log('开始上传文件:', { filePath, type, endpoint, url: BASE_URL + endpoint, hasToken: !!token, isLogin: userStore.isLogin }) uni.uploadFile({ url: BASE_URL + endpoint, filePath: filePath, name: 'file', header: { 'Authorization': `Bearer ${token}` }, success: (res) => { console.log('上传响应:', res) if (res.statusCode === 200) { try { const data = JSON.parse(res.data) console.log('解析后的响应数据:', data) if (data.code === 0) { resolve(data.data) } else { reject(new Error(data.message || '上传失败')) } } catch (e) { console.error('解析响应失败:', e, res.data) reject(new Error('解析响应失败')) } } else if (res.statusCode === 401) { // token过期,清除登录状态 userStore.logout() reject(new Error('登录已过期,请重新登录')) } else { console.error('上传失败,状态码:', res.statusCode, res) reject(new Error(`上传失败(${res.statusCode})`)) } }, fail: (err) => { console.error('上传请求失败:', err) reject(new Error(err.errMsg || '网络错误')) } }) }) } /** * uni-app 上传视频 * @param {String} filePath 本地文件路径 * @returns {Promise} */ export function uniUploadVideo(filePath) { return uniUploadImage(filePath, 'video') } /** * uni-app 上传多个图片(使用 uni.uploadFile) * @param {Array} filePaths 本地文件路径数组 * @returns {Promise} */ export function uniUploadImages(filePaths) { const uploadPromises = filePaths.map(filePath => uniUploadImage(filePath)) return Promise.all(uploadPromises) }