From d8c1ac6a9eaa028edfbd63236cef1d85ef35bb6f Mon Sep 17 00:00:00 2001 From: jacy-dukang Date: Sun, 12 Jul 2026 17:39:46 +0800 Subject: [PATCH] =?UTF-8?q?=E9=80=89=E5=9B=BE=E6=88=90=E5=8A=9F=E4=B8=8A?= =?UTF-8?q?=E4=BC=A0bug=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/components/OssUploadField.tsx | 26 ++++++++++++++----- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/apps/h5-partner/src/components/OssUploadField.tsx b/apps/h5-partner/src/components/OssUploadField.tsx index a958ba2..ac3e11a 100644 --- a/apps/h5-partner/src/components/OssUploadField.tsx +++ b/apps/h5-partner/src/components/OssUploadField.tsx @@ -99,17 +99,24 @@ export default function OssUploadField({ }); }, [useWechatPicker, needsAuth]); - async function uploadSelectedFile(file: File) { - if (file.size > DEFAULT_MAX_MB * 1024 * 1024) { - const text = `文件不能超过 ${DEFAULT_MAX_MB}MB`; - showUploadError(text); + async function persistUpload(file: File) { + if (!file.size) { + showUploadError('图片读取失败,请重新选择'); return; } + if (file.size > DEFAULT_MAX_MB * 1024 * 1024) { + showUploadError(`文件不能超过 ${DEFAULT_MAX_MB}MB`); + return; + } + const result = await uploadFileToOss(file, { bizType, mediaType }); + onChange?.(result.url); + } + + async function uploadSelectedFile(file: File) { setUploading(true); setError(''); try { - const result = await enqueueUpload(() => uploadFileToOss(file, { bizType, mediaType })); - onChange?.(result.url); + await enqueueUpload(() => persistUpload(file)); } catch (e) { showUploadError(e instanceof Error ? e.message : '上传失败'); } finally { @@ -142,14 +149,19 @@ export default function OssUploadField({ try { weixinSdk.reset(); await weixinSdk.init(); + // 选图 + 上传须在同一个队列任务内完成,避免嵌套 enqueueUpload 死锁 await enqueueUpload(async () => { const files = await weixinSdk.chooseImages({ count: 1, sourceType: ['album', 'camera'], }); if (!files?.[0]) return; - await uploadSelectedFile(files[0]); + await persistUpload(files[0]); }); + } catch (e) { + const msg = e instanceof Error ? e.message : '无法打开相册'; + if (/cancel/i.test(msg)) return; + showUploadError(formatWechatUploadError(e)); } finally { setUploading(false); }