ykt-wxapp/utils/file.js

76 lines
1.9 KiB
JavaScript
Raw Normal View History

2026-01-21 13:37:54 +08:00
const env = __VITE_ENV__;
export async function uploadFile(tempFilePath, businessType, accessLevel = 'public') {
try {
const res = await new Promise((resolve, reject) => {
uni.uploadFile({
url: `${env.MP_API_BASE_URL}/upload`,
filePath: tempFilePath,
name: 'file',
formData: { businessType, accessLevel },
success: (resp) => resolve(resp),
fail: (err) => reject(err),
});
});
const data = typeof res.data === 'string' ? JSON.parse(res.data) : res.data;
if (data && data.success) {
return data.data;
}
} catch (e) {
console.log('upload file error:', e);
}
return undefined;
}
/**
* 选择单张图片并上传成功返回上传结果接口返回的 data.data
* - 内部会处理 loading / toast
* - 失败或取消返回 null
*/
export async function chooseAndUploadImage(options = {}) {
const {
count = 1,
sizeType = ['compressed'],
sourceType = ['album', 'camera'],
businessType = 'other',
accessLevel = 'public',
loadingTitle = '上传中...',
successToast = '上传成功',
failToast = '上传失败',
} = options;
const imageResult = await new Promise((resolve) => {
uni.chooseImage({
count,
sizeType,
sourceType,
success: (res) => resolve(res),
fail: () => resolve(null),
});
});
const tempFilePath = imageResult?.tempFilePaths?.[0];
if (!tempFilePath) {
return null;
}
uni.showLoading({ title: loadingTitle });
try {
const uploadRes = await uploadFile(tempFilePath, businessType, accessLevel);
uni.hideLoading();
if (uploadRes) {
uni.showToast({ title: successToast, icon: 'success' });
return uploadRes;
}
uni.showToast({ title: failToast, icon: 'none' });
return null;
} catch (e) {
uni.hideLoading();
uni.showToast({ title: failToast, icon: 'none' });
return null;
}
}