Files
1818uniapp/src/api/upload.js
2026-02-13 17:36:42 +08:00

135 lines
3.3 KiB
JavaScript
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'
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<File>} 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<String>} filePaths 本地文件路径数组
* @returns {Promise}
*/
export function uniUploadImages(filePaths) {
const uploadPromises = filePaths.map(filePath => uniUploadImage(filePath))
return Promise.all(uploadPromises)
}