diff --git a/src/components/uploader/ImageManager.vue b/src/components/uploader/ImageManager.vue index c7492d4..5e8059c 100644 --- a/src/components/uploader/ImageManager.vue +++ b/src/components/uploader/ImageManager.vue @@ -139,6 +139,23 @@ const isPdf = (img) => { return name.includes('pdf') || name.includes('application/pdf'); }; +const parseServerFileMeta = (serverId) => { + if (!serverId) return { tempFileName: '', originalName: '', mimeType: '' }; + if (typeof serverId === 'object') { + const nested = serverId.data && typeof serverId.data === 'object' ? serverId.data : serverId; + return { + tempFileName: nested.tempFileName || nested.filename || '', + originalName: nested.originalName || nested.fileName || '', + mimeType: nested.mimeType || '' + }; + } + try { + return parseServerFileMeta(JSON.parse(serverId)); + } catch { + return { tempFileName: String(serverId), originalName: '', mimeType: '' }; + } +}; + const serverOptions = computed(() => ({ url: API_BASE_URL, process: { @@ -147,17 +164,12 @@ const serverOptions = computed(() => ({ Authorization: `Bearer ${authStore.accessToken}` }, onload: (response) => { - try { - const res = typeof response === 'string' ? JSON.parse(response) : response; - const fileData = res.data || res; - return JSON.stringify({ - tempFileName: fileData.tempFileName || fileData.filename, - originalName: fileData.originalName, - mimeType: fileData.mimeType - }); - } catch (e) { - return response; - } + const meta = parseServerFileMeta(response); + return JSON.stringify({ + tempFileName: meta.tempFileName, + originalName: meta.originalName, + mimeType: meta.mimeType + }); } }, revert: null @@ -179,20 +191,12 @@ const fetchTempSignedUrl = async (tempFileName) => { const handleProcessFile = async (error, file) => { if (error) return; - let tempFileName = ''; - let originalName = file.filename; - let mimeType = file.fileType || ''; + const meta = parseServerFileMeta(file.serverId); + const tempFileName = meta.tempFileName || ''; + const originalName = meta.originalName || file.filename; + const mimeType = meta.mimeType || file.fileType || ''; - try { - const parsed = JSON.parse(file.serverId); - tempFileName = parsed.tempFileName || ''; - originalName = parsed.originalName || originalName; - mimeType = parsed.mimeType || mimeType; - } catch { - tempFileName = file.serverId; - } - - const signedUrl = await fetchTempSignedUrl(tempFileName); + const signedUrl = tempFileName ? await fetchTempSignedUrl(tempFileName) : ''; const newItem = { name: originalName, @@ -206,10 +210,14 @@ const handleProcessFile = async (error, file) => { height: 1200 }; - const updated = [...imagesList.value, newItem]; - emit('update:modelValue', updated); + emit('update:modelValue', [...imagesList.value, newItem]); emit('upload-success', newItem); await nextTick(); + try { + pond.value?.removeFile?.(file.id); + } catch { + // FilePond may already have dropped the item + } reinitLightbox(); }; diff --git a/src/components/uploader/UserFilesSection.vue b/src/components/uploader/UserFilesSection.vue index f934e62..85443ff 100644 --- a/src/components/uploader/UserFilesSection.vue +++ b/src/components/uploader/UserFilesSection.vue @@ -1,16 +1,16 @@ - +