Hallo Michael_K,
Die IndexedDB ist - je nach Browser - dazu fähig, viele Gigabytes an Daten zu speichern. Die localStorage und sessionStorage Objekte sind auf 5MB pro Origin limitiert, die IndexedDB dagegen fällt unter "sonstiges", und hier hängt es am Browser, wieviel möglich ist. Firefox bietet bspw. 10GB pro Origin (vereinfacht gesagt). Safari fragt bei über 1GB den User, ob er das wirklich will. Chromia lassen Dich 60% der Platte vollmüllen. Wenn Dir das nicht reicht - oha, was sind das für Monster, die Du da ablegen willst?!
Wenn die Daten für die IndexedDB zu groß werden, dann sind sie vermutlich auch zu groß, um in JSON-Strings gespeichert zu werden. Oder sind es einfach viele kleine Dateien und in Summe zu viel? Es ist dann aber trotzdem fragwürdig, das alles auf den PC des Anwenders zu schaufeln. Daten in der IndexedDB sind - genau wie Cache und local/sessionStorage - Kandidaten für einen Rauswurf, wenn dem Browser der Speicher eng wird. Es gibt keine Garantie, dass sie drin bleiben. Daten im Cache dürften dabei sogar noch eher rausfliegen als Daten in der IndexedDB.
Um das klarzustellen: ein "JSON-Objekt" gibt es nicht. Es gibt JavaScript-Objekte, und JSON-Strings, die ein JavaScript-Objekt codieren.
Bei deinem Ansinnen sehe ich 2 Probleme:
- Es gibt keinen Standardweg, um ein Blob-Objekt in einen JSON-String zu überführen und nachher wieder exakt so zurückzubekommen. Hier kann man sicherlich etwas zurechtprogrammieren, aber es ist umständlich. So umständlich, dass ich das jetzt nicht zusammensuchen mag. Vor allem wegen Problem 2:
- Das Cache-API, das ich kenne, ist ein Teil des ServiceWorker API und cached HTTP Requests. Du hast aber keinen HTTP Request. Reden wir hier vom gleichen API? Ich rede von dem Cache-Objekt, das Du mit cached.open() bekommen kannst.
Was sind die Inhalte der Dateien, die Du speicherst? Ist das Text oder ist das binär? Wenn es Text ist, könnte es funktionieren, diesen Text herauszuholen und nur den Textinhalt ins Objekt zu stellen, bevor Du den JSON-String draus machst.
Auch die Strucktur des json Object kann/will ich nicht ändern
Hör ich da einen Fuß aufstampfen? 😉
Du wirst das müssen. In der gezeigten Form bekommst Du das Objekt VIELLEICHT in die IndexedDB (hab ich keine Erfahrung mit). Sonst nirgendwohin.
Rolf
sumpsi - posui - obstruxi