ファイルとディレクトリー項目 API
ファイルとディレクトリー項目 API は、ユーザーがフォーム入力またはドラッグ&ドロップ操作で指定したディレクトリーやファイルリストを処理する手段を提供します。これは単一のファイルを扱うファイル API のより高度なバージョンです。当初は完全な仮想ファイルシステムへの対応を目的としていましたが、これでユーザー提供データに対する読み取り操作のみに対応しています。
ファイル関連のその他の API との関係では、この API と、ファイルシステム API、ファイル APIとの比較を行っています。
ファイルシステムへのアクセス権の取得
仕様の現在の草案で定義されているファイルシステムへのアクセスを取得する方法は 2 つあります。
- ドラッグ&ドロップで
dropイベントを扱う際、DataTransferItem.webkitGetAsEntry()を呼び出すとドロップされたアイテムのFileSystemEntryを取得することができます。結果がnullでなかった場合、これはドロップされたファイルまたはディレクトリーであり、ファイルシステム呼び出しを使用して取り扱うことができます。 HTMLInputElement.webkitEntriesプロパティでは、現在選択されているファイルのFileSystemFileEntryオブジェクトにアクセスすることができますが、これはファイル選択へドラッグ&ドロップされた場合に限られます(Firefox バグ 1326031)。HTMLInputElement.webkitdirectoryがtrueである場合、<input>要素はディレクトリーピッカーとなり、それぞれの選択されたディレクトリーのFileSystemDirectoryEntryオブジェクトを取得できます。
歴史
元々のファイルシステム API は、ブラウザーがユーザーのストレージ機器上のサンドボックス化された仮想ファイルシステムにアクセスできるようにするために作成されました。仕様の標準化作業は 2012 年に放棄されましたが、その時点で Google Chrome は独自の実装を既に搭載していました。時間とともに、多くの人気サイトやウェブアプリケーションがこれを使用するようになりました。多くの場合、標準 API へのフォールバック手段を指定せず、API が利用可能かどうかを調べることすらせず、そのまま使用していたのです。Mozilla は代わりに、IndexedDB など、同様の問題の多くを解決できる他の API の実装を選択しました。詳細な分析はブログ記事 Why no FileSystem API in Firefox? をご覧ください。
その結果、多くの人気ウェブサイトが Chrome 以外のブラウザーでは正常に動作しなくなりました。この問題を解決するため、Google の API のうち合意が得られた機能が「ファイルとディレクトリー項目 API」として標準化され、その後他のブラウザーにも実装されました。
インターフェイス
ファイルとディレクトリー項目 API には以下のインターフェイスがあります。
FileSystem-
ファイルシステムを表します。
FileSystemEntry-
ファイルシステムにおける単一の項目を表現する基本インターフェイス。ファイルやディレクトリーを表現する他のインターフェイスによって実装される。
FileSystemFileEntry-
ファイルシステム内の単一のファイルを表します。
FileSystemDirectoryEntry-
ファイルシステム内の単一のディレクトリーを表します。
FileSystemDirectoryReader-
FileSystemDirectoryEntry.createReader()を呼び出すことで生成され、このインターフェイスはディレクトリーの内容を読み取る機能を提供します。
他のインターフェイスへの拡張
DataTransferItem.webkitGetAsEntry()-
選択されたファイルのファイルシステム上の項目を表す
FileSystemEntryの派生オブジェクトを返します。これは通常FileSystemFileEntryまたはFileSystemDirectoryEntryオブジェクトのどちらかになります。 File.webkitRelativePath-
Fileの URL に対する相対パスを返します。 HTMLInputElement.webkitdirectory-
webkitdirectory属性を表す論理値です。trueの場合、ファイルシステムピッカーインターフェイスはファイルではなくディレクトリーのみを受け入れます。 HTMLInputElement.webkitEntries-
現在選択されているファイルまたはディレクトリーを指定します。
仕様書
| Specification |
|---|
| File and Directory Entries API> # api-domfilesystem> |