refactor: Enhance error handling for file metadata fetching and parsing
This commit is contained in:
@@ -100,17 +100,28 @@ export default function DownloadPage() {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
const metaRes = await fetch(`/api/file/${file_id}?token=${token}`);
|
const metaRes = await fetch(`/api/file/${file_id}?token=${token}`);
|
||||||
if (!metaRes.ok) {
|
let metadata;
|
||||||
const err = await metaRes.json();
|
try {
|
||||||
throw new Error(err.error || 'Failed to fetch file metadata.');
|
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);
|
setFilename(metadata.filename);
|
||||||
setTotalBytes(metadata.size);
|
setTotalBytes(metadata.size);
|
||||||
|
|
||||||
setDownloadState('downloading');
|
setDownloadState('downloading');
|
||||||
const encryptedParts = new Array(metadata.num_parts);
|
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 downloadPromises = metadata.parts.map(async (part: MetadataPart) => {
|
||||||
const response = await fetchWithRetry(`/api/download-part/${file_id}/${part.part_index}`);
|
const response = await fetchWithRetry(`/api/download-part/${file_id}/${part.part_index}`);
|
||||||
const buffer = await response.arrayBuffer();
|
const buffer = await response.arrayBuffer();
|
||||||
|
|||||||
Reference in New Issue
Block a user