import env from '../config/env.js' /** * 文件上传工具 * 对应PC端的 upload.js */ const upload = { /** * 上传文件到服务器 * @param {String} filePath - 文件临时路径 * @param {Object} options - 配置选项 * @param {String} options.name - 文件字段名,默认 'fileEdit' * @param {Object} options.formData - 额外的表单数据,默认 { application: '' } * @param {Boolean|String} options.loading - 是否显示loading,或loading文字 * @returns {Promise} 返回服务器响应数据 */ uploadFile(filePath, options = {}) { const { name = 'fileEdit', formData = { application: '' }, loading = true } = options // 显示 loading if (loading) { const loadingTitle = typeof loading === 'string' ? loading : '上传中...' uni.showLoading({ title: loadingTitle, mask: true }) } // 获取设备信息 const deviceInfo = uni.getStorageSync("deviceInfo") || {} const devId = deviceInfo.deviceId || '' const sbmc = deviceInfo.model || '' // 构建上传URL(对应PC端的 /service?ssServ=ulByHttp&type=img) const url = '/service?ssServ=ulByHttp&type=img' const separator = url.includes('?') ? '&' : '?' const finalUrl = `${env.baseUrl}${url}${separator}devId=${devId}&sbmc=${sbmc}` return new Promise((resolve, reject) => { uni.uploadFile({ url: finalUrl, filePath, name, formData, header: (() => { const headers = {} const jsessionId = uni.getStorageSync('JSESSIONID') if (jsessionId) { headers['Cookie'] = `JSESSIONID=${jsessionId}` } return headers })(), success: (res) => { if (res.statusCode === 200) { try { // 解析返回数据,对应PC端的格式: // { fileList: [{ path: "xxx.png", fileName: "xxx.png" }] } const data = JSON.parse(res.data) resolve(data) } catch (e) { // 如果解析失败,返回原始数据 resolve(res.data) } } else { reject(res) } }, fail: (err) => { uni.showToast({ title: '上传失败', icon: 'none' }) reject(err) }, complete: () => { if (loading) { uni.hideLoading() } } }) }) }, /** * 上传图片(快捷方法) * @param {String} filePath - 图片临时路径 * @param {Object} options - 配置选项 * @returns {Promise} 返回服务器上的图片路径 */ async uploadImage(filePath, options = {}) { try { const result = await this.uploadFile(filePath, { ...options, loading: options.loading !== false ? '上传图片中...' : false }) // 提取文件路径(对应PC端的 result.fileList[0].path) return result?.fileList?.[0]?.path || '' } catch (error) { console.error('上传图片失败:', error) throw error } }, /** * 上传头像(专用方法) * @param {String} filePath - 头像临时路径 * @returns {Promise} 返回服务器上的头像路径 */ async uploadAvatar(filePath) { return this.uploadImage(filePath, { loading: '上传头像中...' }) } } export default upload