4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Qiita株式会社Advent Calendar 2024

Day 17

Tips: fetchしたデータをBlobに変換してIndexedDBに保存する

Last updated at Posted at 2024-12-16

初めに

では、Base64でデータの保存を行いましたが、IndexedDBはBlobデータのままでも
データの保存を行うことが可能です。
この記事では、fetchしたデータをBlobに変換し、IndexedDBに保存する方法について記事にします。

IndexedDBとは

IndexedDBとは、ブラウザに多様なデータを保存するためのAPIです。
詳しくは↓をご覧ください。

↓に記載の通り、IndexedDBにはBlob形式のオブジェクトも保存が可能です。

実装

今回も前回の記事と同じく

を用いて実装します。
コードは以下の通りです。

import { set, get, clear } from "idb-keyval";

export const getAudioCache = async (url: string) => {
  const blob = await get<Blob>(url);
  return URL.createObjectURL(blob);
};

export const cacheAudio = async (url: string) => {
  const response = await fetch(url);
  const blob = await response.blob();
  await set(url, blob);
  return data;
};

export const clearAudioCache = async () => {
  await clear();
};

前回の記事と異なる点は以下の二つです。

getAudioCache

Blobデータをそのまま返すのではなく、urlを引数でとっているためそのままURLで返すようなインターフェースに変更しました。
BlobデータをURLに変更するため、URL.createObjectUrlを用いています。

これにより、cacheAudioを利用する、しないに関わらず外部の処理の実装はほとんど変化させずに利用できると思います。

cacheAudio

こちらは前回の記事ではBase64に変換する処理にしていましたが、今回はBlobをそのまま保存するようにしています。

4
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?