first commit
This commit is contained in:
134
src/api/upload.js
Normal file
134
src/api/upload.js
Normal file
@@ -0,0 +1,134 @@
|
||||
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)
|
||||
}
|
||||
Reference in New Issue
Block a user