createObjectURLは、ブラウザ上でBlobやFile APIを使用してオブジェクトURLを生成するためのJavaScript関数です。この記事では、createObjectURLの基本的な使い方から実践的な活用方法まで解説します。
createObjectURLとは
createObjectURLは、BlobやFileオブジェクトから一時的なURLを生成する関数です。生成されたURLは、画像やファイルをブラウザ上で表示・ダウンロードする際に使用できます。
const url = URL.createObjectURL(blob);基本的な使い方
画像ファイルからURLを生成する例:
// input要素からファイルを取得
const fileInput = document.querySelector('input[type="file"]');
fileInput.addEventListener('change', (e) => {
const file = e.target.files[0];
const url = URL.createObjectURL(file);
// 画像を表示
const img = document.createElement('img');
img.src = url;
document.body.appendChild(img);
});メモリリークを防ぐ
createObjectURLで生成されたURLは、明示的に解放するまでメモリに残り続けます。メモリリークを防ぐため、不要になったURLは`revokeObjectURL()`で解放することが重要です。
const url = URL.createObjectURL(blob);
// URLを使用後に解放
URL.revokeObjectURL(url);実践的な使用例
画像プレビューの実装
function createImagePreview() {
const input = document.querySelector('#imageInput');
const preview = document.querySelector('#preview');
input.addEventListener('change', () => {
const file = input.files[0];
if (file) {
const url = URL.createObjectURL(file);
preview.src = url;
// 画像読み込み完了後にURLを解放
preview.onload = () => {
URL.revokeObjectURL(url);
};
}
});
}ファイルダウンロードの実装
function downloadFile(content, filename) {
const blob = new Blob([content], { type: 'text/plain' });
const url = URL.createObjectURL(blob);
const link = document.createElement('a');
link.href = url;
link.download = filename;
link.click();
// URLを解放
setTimeout(() => {
URL.revokeObjectURL(url);
}, 100);
}注意点
- createObjectURLは一時的なURLを生成するため、ページをリロードすると無効になります
- 大量のURLを生成する場合は、適切なタイミングでrevokeObjectURLを呼び出してメモリを解放する必要があります
- 生成されたURLはブラウザのメモリ内に保存されるため、大きなファイルを扱う際は注意が必要です
対応ブラウザ
createObjectURLは、主要なモダンブラウザで広くサポートされています:
- Chrome
- Firefox
- Safari
- Edge
- Opera
まとめ
createObjectURLは、ブラウザ上でファイルを扱う際に非常に便利な機能です。適切なメモリ管理を行いながら使用することで、効率的なファイル操作が可能になります。画像のプレビューやファイルのダウンロードなど、様々なユースケースで活用できます。