| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- 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<String>} 返回服务器上的图片路径
- */
- 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<String>} 返回服务器上的头像路径
- */
- async uploadAvatar(filePath) {
- return this.uploadImage(filePath, {
- loading: '上传头像中...'
- })
- }
- }
- export default upload
|