From 8b65f49780a2cbd1136ea61be8e2b06375408026 Mon Sep 17 00:00:00 2001 From: JavaZero <71128095+JavaZeroo@users.noreply.github.com> Date: Tue, 9 Sep 2025 11:31:27 +0800 Subject: [PATCH] fix: handle storage quota for uploaded files --- src/App.jsx | 39 ++++++++++++++++++++++++++++----------- 1 file changed, 28 insertions(+), 11 deletions(-) diff --git a/src/App.jsx b/src/App.jsx index b12b4ee..9e85626 100644 --- a/src/App.jsx +++ b/src/App.jsx @@ -77,17 +77,34 @@ function App() { useEffect(() => { if (savingDisabledRef.current) return; - const serialized = uploadedFiles.map(({ id, name, enabled, content, config }) => ({ - id, - name, - enabled, - content, - config - })); - if (serialized.length > 0) { - localStorage.setItem('uploadedFiles', JSON.stringify(serialized)); - } else { - localStorage.removeItem('uploadedFiles'); + try { + const serialized = uploadedFiles.map(({ id, name, enabled, content, config }) => ({ + id, + name, + enabled, + content, + config + })); + if (serialized.length > 0) { + const json = JSON.stringify(serialized); + // Avoid filling localStorage with very large files + if (json.length > 5 * 1024 * 1024) { + savingDisabledRef.current = true; + console.warn('Uploaded files exceed storage limit; persistence disabled.'); + return; + } + localStorage.setItem('uploadedFiles', json); + } else { + localStorage.removeItem('uploadedFiles'); + } + } catch (err) { + if (err instanceof DOMException && err.name === 'QuotaExceededError') { + savingDisabledRef.current = true; + console.warn('LocalStorage quota exceeded; uploaded files will not be persisted.'); + localStorage.removeItem('uploadedFiles'); + } else { + throw err; + } } }, [uploadedFiles]);