GWT‎ > ‎HTML5‎ > ‎

File Directory and System API

ファイルをアップロードしたりするFile APIとは別物で
実際のファイルのようにフォルダーを作成したり、リネーム、削除などできるようにしたもの

GWTでの実装は、Google Code HostやGithubにいくつある。
自作ライブラリーでテストはしたが、他のは見検証
ただし、GWT2.5以降、主流になるだろう、elementalを使ったものは存在するか不明


私がこの、File Directory and System APIを勉強し始めた理由は、LocalStorageの5MBでは、Webアプリのデーター保存量として不十分だった。
Google Driveも検討したが、サンプル見つからなくて挫折した。Firefoxじゃなくて、他のHTML5に多数対応しているChromeで動くアプリを作りたかったからです。

File Directory and System APIの現状

普及していない

Chromeブラウザー以外に実装されておらず、Web SQL Database同様、お蔵入りの可能性がある

一方、Chromeブラウザー22までで大容量保存するほぼ唯一の方法

HTML5でのストレージ保存はIndexedDBに集約されそうだが、ChromeにはこのFile Directory and System APIしか、5MBを超える大容量のデーターを保存する手段がない。
そのうち、Quota Managementが他でも使えるようになるだろうが。Chrome Web AppのManifestにはUnlimitedが用意されてるが、Web SQLのみ対応
(そう、別の方法としてこのWeb SQLがあるが、単純なデータの保存はめんどくさい)

IEは不明だが、FirefoxはIndexedDBの容量拡張が可能

使い勝手

async処理のためCallbackだらけで、コードが非常に読みにくくなるが、通常のファイル操作と似た感じで、ファイルを扱えるのは便利
特に、パソコンとかで、ファイルをドロップして保存、保存したファイルを出力したりする場合に便利、toURL() (filesystem:http://example.com/temporary/myfile.png)もある

また、seekなどあるので、バイナリーファイルの読み書きが楽だ。

ただIndexedDBは未勉強なので、比較できない

Chromeブラウザー向けWebアプリで、大容量のデーターを保存したい場合の選択肢の一つ


使用してみての豆知識


HTMl5Rockのチュートリアル読めば大抵わかります。
ただし、BlobBuilderを使っているのでDeprecatedと警告出ますが

保存先は、一時的ファイル向けと、ユーザーが消すまで永遠に残る物がある。

writeとtruncateに注意

はじめに、truncateというのは、ファイルの長さを変更するメソッドです。
というのも、このFile Directory and System APIでは、上書きしたとしても、上書きしたデーターの長さが短いと前のが残ります。
(これは追記処理とかバイナリー処理を実現するため)
なので、追記の場合は、先か後に長さを調整する必要があります。

しかし、このtruncateメソッドは、writeと同時に実行できません。あくまで片方の処理を終えたあとのonwriteendのcallback内で呼び出さないとなりません。

失敗例と解決策はここにあります。(ちなみに、謎のtruncate(1)は、文字列の間を0パッディングしたかったのでしょう)

こういうメソッドの細かい挙動は、W3Cの仕様書で確認できます。

追記処理をしたい場合

seekを使います。
fileWriter.seek(fileWriter.length()); みたいな感じで

データーを削除したり、Quotaを消したい場合

Chromeブラウザーの詳細設定を表示
コンテンツの設定
すべてのCookieとサイトデーターから、ファイルシステムのみ、あるいはサイトごと消します。
どうも、Quotaを解除(減らす)するには、他のローカルストレージやIndexedDBも巻き添えになりそうだ。

一般ユーザー向けに使うには十分な説明が必要

用意されている、Quotaの確保時のメッセージが非常にわかりにくい。
大事なデーターを保存するには、設定のUIが非常にわかりにくいので、ユーザーが不注意で消しそう。


将来

Webアプリの場合
このままChromeが他Storageに対するQuotaを実装しなければ、ChromeだけFile System API他は、IndexedDBで分岐した保存をするしかない
あとは、オプションでGoogle DriveやDropboxに対応というふうになるのかな。



Comments