Files
xo_user_client/utils/uploadFile.js
2025-06-16 17:51:09 +08:00

83 lines
2.1 KiB
JavaScript

const app = getApp();
/**
* 选择并上传图片
* @param {number} count - 最多选择的图片数量
* @param {boolean} compressed - 是否压缩图片
* @returns {Promise} - 返回上传成功后的图片URL数组
*/
export function uploadImage(count = 1, compressed = true) {
return new Promise((resolve, reject) => {
// 选择图片
uni.chooseImage({
count,
sizeType: compressed ? ['compressed'] : ['original'],
sourceType: ['album', 'camera'],
success: (res) => {
const tempFilePaths = res.tempFilePaths;
const uploadPromises = tempFilePaths.map((tempFilePath) =>
uploadSingleImage(tempFilePath)
);
// 并行上传所有图片
Promise.all(uploadPromises)
.then(results => resolve(results))
.catch(error => reject(error));
},
fail: (err) => {
console.error('选择图片失败:', err);
reject(err);
}
});
});
}
/**
* 上传单张图片
* @param {string} filePath - 本地图片路径
* @returns {Promise} - 返回上传成功后的图片URL
*/
function uploadSingleImage(filePath) {
return new Promise((resolve, reject) => {
uni.uploadFile({
url: app.globalData.get_request_url('excel', 'xo'), // 上传地址
filePath,
name: 'file', // 服务器接收的文件字段名
success: (res) => {
if (res.statusCode === 200) {
try {
const data = JSON.parse(res.data);
if (data.code === 0) { // 根据实际接口返回格式调整
resolve(data.data.url); // 返回图片URL
} else {
reject(new Error(data.message || '上传失败'));
}
} catch (e) {
reject(new Error('解析响应数据失败'));
}
} else {
reject(new Error(`服务器响应错误: ${res.statusCode}`));
}
},
fail: (err) => {
console.error('上传图片失败:', err);
reject(err);
}
});
});
}
/**
* 预览图片
* @param {Array} urls - 图片URL数组
* @param {number} current - 当前预览的图片索引
*/
export function previewImage(urls, current = 0) {
uni.previewImage({
urls,
current,
fail: (err) => {
console.error('预览图片失败:', err);
}
});
}