ファイルをアップロードしたりする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に対応というふうになるのかな。 |