diff --git a/src/app/download/[file_id]/page.tsx b/src/app/download/[file_id]/page.tsx index 8dde86d..22e2415 100644 --- a/src/app/download/[file_id]/page.tsx +++ b/src/app/download/[file_id]/page.tsx @@ -100,17 +100,28 @@ export default function DownloadPage() { try { const metaRes = await fetch(`/api/file/${file_id}?token=${token}`); - if (!metaRes.ok) { - const err = await metaRes.json(); - throw new Error(err.error || 'Failed to fetch file metadata.'); + let metadata; + try { + metadata = await metaRes.json(); + } catch (jsonError) { + console.error('Failed to parse metadata response as JSON:', jsonError); + throw new Error('Failed to parse file metadata.'); } - const metadata = await metaRes.json(); + + if (!metaRes.ok) { + throw new Error(metadata.error || 'Failed to fetch file metadata.'); + } + setFilename(metadata.filename); setTotalBytes(metadata.size); setDownloadState('downloading'); const encryptedParts = new Array(metadata.num_parts); + if (!Array.isArray(metadata.parts)) { + throw new Error('Invalid metadata: parts is not an array.'); + } + const downloadPromises = metadata.parts.map(async (part: MetadataPart) => { const response = await fetchWithRetry(`/api/download-part/${file_id}/${part.part_index}`); const buffer = await response.arrayBuffer();