SlideShare ist ein Scribd-Unternehmen logo
1 von 39
Downloaden Sie, um offline zu lesen
File API:
Writer & Directories and System




      天野 卓 @ ToI企画
        2011.7.23
自己紹介
佐久市でWebアプリケーションを開発しています。
フリーソフトウェアを配布しています
  http://tec.toi-planning.net

GitHub
  http://github.com/usualoma

jsdo.it
  http://jsdo.it/usualoma
今日紹介する JavaScirpt の API
File API: Writer
File API: Directories and System
http://platform.html5.org/
http://platform.html5.org/
ところで...
http://platform.html5.org/
File API
File API とは
ファイルを JavaScript 上で扱うための仕様
 ユーザーが指定したファイルの情報を取得
  ファイル名
  ファイルサイズ

 指定されたファイルを読み込み

サポートしているブラウザ
 Firefox 3.6以降
 Google Chrome 6以降
 Opera 11.50で確認
  window.URL は利用できない
File API のインターフェイス
FileList
Blob
File
FileReader / FileReaderSync
URI scheme
File API のインターフェイスの説明 - 1
FileList
  <input type="file" multiple /> で指定されたファイル
  の一覧

Blob
  "データ"を扱うインターフェイス
       範囲を指定してバイナリのチャンクを取得できる

  Fileの親インターフェイス

File
  ファイル名と最終更新日時の取得
File API のインターフェイスの説明 - 2
FileReader / FileReaderSync
  エンコーディングを指定してテキストとして読み込むこと
  ができる
  バイナリデータとして読み込むことができる

URI scheme
  Blob のURLを生成することができる
   選択されたファイルのプレビューなど
注意事項

// プレフィックスが必要な場合があります

var BlobBuilder =
  window.BlobBuilder ||
  window.MozBlobBuilder ||
  window.WebKitBlobBuilder;

var URL = window.URL || window.webkitURL;

var requestFileSystem =
  window.requestFileSystem ||
  window.webkitRequestFileSystem;
File API を使ったコード
File API を使ったコード

$('#show_file').submit(function() {
   for (var i = 0; i < this.file.files.length; i++) {
      var file = this.file.files[i];
      print('name:' + file.name);
      print('size:' + file.size);
      print('type:' + file.type);
      if (isImage(file.type)) {
         printImage(URL.createObjectURL(file));
          }
    }

   return false;
});
File API を使ったコードの実行結果
Drag and drop
    は?
http://platform.html5.org/
Drag and drop API

function receive(event, element) {
  var data = event.dataTransfer.items;
  for (var i = 0; i < data.length; i += 1) {
     if (
        (data[i].kind == 'file') &&
        (data[i].type.match('^image/'))
         ) {
        var img = new Image();
        img.src = URL.createObjectURL(data[i].getAsFile());
        element.appendChild(img);
         }
   }
}
File API: Writer とは
ファイルに書き込むための仕様
 File API で定義されている File/Blob は変更すること
 ができなかった

サポートしているブラウザ (全ての機能が使えるわ
けではない)
 Firefox 6以降
 Google Chrome 9以降 (起動オプションが必要)
  --unlimited-quota-for-files
  --allow-file-access-from-files
File API: Writer のインターフェイス
BlobBuilder
FileSaver
FileWriter
FileWriterSync
File API: Writer のインターフェイスの説明
 BlobBuilder
   バイナリデータの構築

 FileSaver
   Blob をファイル名を指定して保存

 FileWriter / FileWriterSync
   length, position
   write, seek, truncate
File API: Writer を使ったコードのイメージ

var bb = new BlobBuilder();
for (var i = 0; i < rows.length; i++) {
   var row = rows[i];
   bb.append(createCSVRow(row));
}
// window.saveAs は 2011/7/23 時点ではまだ利用できません
var fileSaver =
  window.saveAs(bb.getBlob('text/csv'), 'date.csv');
File API: Directories and System とは
 ファイルシステムにアクセスするための仕様
  ただし、任意のファイルにアクセスすることはできない
  データのストレージとして利用することができる
  オリジン毎のサンドボックスが用意される
    オリジン = プロトコル + ドメイン + ポート

 サポートしているブラウザ
  Google Chrome 9以降 (オプションを付けると利用可
  能)
    --unlimited-quota-for-files
    --allow-file-access-from-files
File API: D & S のインターフェイス
LocalFileSystem / LocalFileSystemSync
FileSystem
Entry
DirectoryEntry
DirectoryReader
FileEntry
File API: D & S でファイルを保存
File API: D & S でファイルを保存 - 1

$('#save_file').submit(function() {
   for (var i = 0; i < this.file.files.length; i++) {
      saveFile(this.file.files[i]);
    }
   return false;
});
File API: D & S でファイルを保存 - 2

function saveFile(selected) {
  requestFileSystem(PERSISTENT, 1024 * 1024,
    function(fs) {
       printAnchor(fs.root.toURL());

      fs.root.getDirectory('data', { create: true },
         function(dir) {
           printAnchor(dir.toURL());

           dir.getFile(selected.name, { create: true },
              function(file) {
                printAnchor(file.toURL());
File API: D & S でファイルを保存 - 3

   file.createWriter(function(writer) {
      writer.onwrite = function(e) {
         if (isImage(selected.type)) {
            printImage(file.toURL());
             }
        };
      writer.onerror = function(e) {
         log('error: ' + e);
        };

      var bb = new BlobBuilder();
      bb.append(selected);
      writer.write(bb.getBlob());
   });
File API: D & S でファイルの一覧を取得 - 1

  $('#find').click(function() {
     requestFileSystem(PERSISTENT, 1024 * 1024,
       function(fs) {
         traverse(fs.root);
          }
      );

     return false;
  });
File API: D & S でファイルの一覧を取得 - 2

     function traverse(dir) {
       var reader = dir.createReader();
       reader.readEntries(
         function(entries) {
            for (var i = 0; i < entries.length; i++) {
                var entry = entries[i];
                printAnchor(entry.toURL());
                if (entry.isDirectory) {
                   traverse(entry);
                      }
                  }
             },
         function(e) {
            log('error: ' + e);
             }
        );
     }
Writer & Directories and System の使い所
   ログの保存
    追記していくことができるので
    "moveTo" などでローテーションもできそう

   メールアプリケーションのキャッシュ
    大きなファイルを保存することができる

   CMS のオフラインでの下書き機能
   ストレージ的な利用
ストレージ
といえば
Web Storage
http://platform.html5.org/
Web Storage との比較
モダンなブラウザでは基本的には利用可能
保存できるデータの容量が基本5Mまで
StorageEvent が使える
 変更の検知

簡単
 setItem / getItem

仕様上はオブジェクトをそのまま保存できる
 2011/7/23時点ではオブジェクトを保存できるブラ
 ウザはない
まとめ
File API: Writer & Directories and System
  ファイルシステムをストレージとして利用可能にする
  API
  ウェブアプリケーションの可能性が広がる
    大きなファイルを扱うアプリケーション
    オフラインで編集を行うアプリケーション
ソースコード
File API
  https://gist.github.com/dad2bb6bd1061ab712f7

File API: Writer & Directories and System
  https://gist.github.com/f6e62d8416ea4bdd0fe4
ご清聴ありがとうご
  ざいました。

      Powered by Rabbit 0.9.3

Weitere ähnliche Inhalte

Ähnlich wie File API: Writer & Directories and System

HTML5でオフラインWebアプリケーションを作ろう
HTML5でオフラインWebアプリケーションを作ろうHTML5でオフラインWebアプリケーションを作ろう
HTML5でオフラインWebアプリケーションを作ろうyoshikawa_t
 
NIO.2を使って簡単ファイル操作
NIO.2を使って簡単ファイル操作NIO.2を使って簡単ファイル操作
NIO.2を使って簡単ファイル操作Yuichi Sakuraba
 
2019-10-18 JXUG Xamarin.Essentials - #3 File System Helpers
2019-10-18 JXUG Xamarin.Essentials - #3 File System Helpers2019-10-18 JXUG Xamarin.Essentials - #3 File System Helpers
2019-10-18 JXUG Xamarin.Essentials - #3 File System HelpersTakeshi Fujimoto
 
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方linzhixing
 
04 filesystem include
04 filesystem include04 filesystem include
04 filesystem include文樹 高橋
 
AWSマイスターシリーズReloaded(AWS Beanstalk)
AWSマイスターシリーズReloaded(AWS Beanstalk)AWSマイスターシリーズReloaded(AWS Beanstalk)
AWSマイスターシリーズReloaded(AWS Beanstalk)Akio Katayama
 
20120416 aws meister-reloaded-aws-elasticbeanstalk-public
20120416 aws meister-reloaded-aws-elasticbeanstalk-public20120416 aws meister-reloaded-aws-elasticbeanstalk-public
20120416 aws meister-reloaded-aws-elasticbeanstalk-publicAmazon Web Services Japan
 
Djangoフレームワークの紹介
Djangoフレームワークの紹介Djangoフレームワークの紹介
Djangoフレームワークの紹介Shinya Okano
 
初めての Data API CMS どうでしょう - 仙台編 -
初めての Data API   CMS どうでしょう - 仙台編 -初めての Data API   CMS どうでしょう - 仙台編 -
初めての Data API CMS どうでしょう - 仙台編 -Yuji Takayama
 
オフラインファーストの思想と実践
オフラインファーストの思想と実践オフラインファーストの思想と実践
オフラインファーストの思想と実践Shumpei Shiraishi
 
Android勉強会 1
Android勉強会 1Android勉強会 1
Android勉強会 1shotaueda3
 
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力ThinReports
 

Ähnlich wie File API: Writer & Directories and System (20)

HTML5でオフラインWebアプリケーションを作ろう
HTML5でオフラインWebアプリケーションを作ろうHTML5でオフラインWebアプリケーションを作ろう
HTML5でオフラインWebアプリケーションを作ろう
 
NIO.2を使って簡単ファイル操作
NIO.2を使って簡単ファイル操作NIO.2を使って簡単ファイル操作
NIO.2を使って簡単ファイル操作
 
2019-10-18 JXUG Xamarin.Essentials - #3 File System Helpers
2019-10-18 JXUG Xamarin.Essentials - #3 File System Helpers2019-10-18 JXUG Xamarin.Essentials - #3 File System Helpers
2019-10-18 JXUG Xamarin.Essentials - #3 File System Helpers
 
HTML5最新動向
HTML5最新動向HTML5最新動向
HTML5最新動向
 
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
 
HTML5&API総まくり
HTML5&API総まくりHTML5&API総まくり
HTML5&API総まくり
 
04 filesystem include
04 filesystem include04 filesystem include
04 filesystem include
 
1Day works shop
1Day works shop1Day works shop
1Day works shop
 
もっと New I/O。
もっと New I/O。もっと New I/O。
もっと New I/O。
 
20061122
2006112220061122
20061122
 
BBBBB
BBBBBBBBBB
BBBBB
 
1MB
1MB1MB
1MB
 
AWSマイスターシリーズReloaded(AWS Beanstalk)
AWSマイスターシリーズReloaded(AWS Beanstalk)AWSマイスターシリーズReloaded(AWS Beanstalk)
AWSマイスターシリーズReloaded(AWS Beanstalk)
 
20120416 aws meister-reloaded-aws-elasticbeanstalk-public
20120416 aws meister-reloaded-aws-elasticbeanstalk-public20120416 aws meister-reloaded-aws-elasticbeanstalk-public
20120416 aws meister-reloaded-aws-elasticbeanstalk-public
 
Djangoフレームワークの紹介
Djangoフレームワークの紹介Djangoフレームワークの紹介
Djangoフレームワークの紹介
 
初めての Data API CMS どうでしょう - 仙台編 -
初めての Data API   CMS どうでしょう - 仙台編 -初めての Data API   CMS どうでしょう - 仙台編 -
初めての Data API CMS どうでしょう - 仙台編 -
 
オフラインファーストの思想と実践
オフラインファーストの思想と実践オフラインファーストの思想と実践
オフラインファーストの思想と実践
 
20080524
2008052420080524
20080524
 
Android勉強会 1
Android勉強会 1Android勉強会 1
Android勉強会 1
 
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
 

Mehr von Taku AMANO

未設定のドメインでも ELB 経由で proxy.pac を使って https で接続する方法
未設定のドメインでも ELB 経由で proxy.pac を使って https で接続する方法未設定のドメインでも ELB 経由で proxy.pac を使って https で接続する方法
未設定のドメインでも ELB 経由で proxy.pac を使って https で接続する方法Taku AMANO
 
Movable Type as a Playground
Movable Type as a PlaygroundMovable Type as a Playground
Movable Type as a PlaygroundTaku AMANO
 
The New Rich Text Editor
The New Rich Text EditorThe New Rich Text Editor
The New Rich Text EditorTaku AMANO
 
CSS Design and Programming
CSS Design and ProgrammingCSS Design and Programming
CSS Design and ProgrammingTaku AMANO
 
Movable Type in the cloud
Movable Type in the cloudMovable Type in the cloud
Movable Type in the cloudTaku AMANO
 
About NSEG Vol.5
About NSEG Vol.5About NSEG Vol.5
About NSEG Vol.5Taku AMANO
 
HTML5-20100626
HTML5-20100626HTML5-20100626
HTML5-20100626Taku AMANO
 
Self Introduction 20100211
Self Introduction 20100211Self Introduction 20100211
Self Introduction 20100211Taku AMANO
 
MT LT 20100205
MT LT 20100205MT LT 20100205
MT LT 20100205Taku AMANO
 
MT LT 20091209
MT LT 20091209MT LT 20091209
MT LT 20091209Taku AMANO
 

Mehr von Taku AMANO (12)

未設定のドメインでも ELB 経由で proxy.pac を使って https で接続する方法
未設定のドメインでも ELB 経由で proxy.pac を使って https で接続する方法未設定のドメインでも ELB 経由で proxy.pac を使って https で接続する方法
未設定のドメインでも ELB 経由で proxy.pac を使って https で接続する方法
 
Movable Type as a Playground
Movable Type as a PlaygroundMovable Type as a Playground
Movable Type as a Playground
 
The New Rich Text Editor
The New Rich Text EditorThe New Rich Text Editor
The New Rich Text Editor
 
CSS Design and Programming
CSS Design and ProgrammingCSS Design and Programming
CSS Design and Programming
 
Movable Type in the cloud
Movable Type in the cloudMovable Type in the cloud
Movable Type in the cloud
 
Git 20100724
Git 20100724Git 20100724
Git 20100724
 
About NSEG Vol.5
About NSEG Vol.5About NSEG Vol.5
About NSEG Vol.5
 
HTML5-20100626
HTML5-20100626HTML5-20100626
HTML5-20100626
 
Git 20100313
Git 20100313Git 20100313
Git 20100313
 
Self Introduction 20100211
Self Introduction 20100211Self Introduction 20100211
Self Introduction 20100211
 
MT LT 20100205
MT LT 20100205MT LT 20100205
MT LT 20100205
 
MT LT 20091209
MT LT 20091209MT LT 20091209
MT LT 20091209
 

File API: Writer & Directories and System

  • 1. File API: Writer & Directories and System 天野 卓 @ ToI企画 2011.7.23
  • 3. 今日紹介する JavaScirpt の API File API: Writer File API: Directories and System
  • 9. File API とは ファイルを JavaScript 上で扱うための仕様 ユーザーが指定したファイルの情報を取得 ファイル名 ファイルサイズ 指定されたファイルを読み込み サポートしているブラウザ Firefox 3.6以降 Google Chrome 6以降 Opera 11.50で確認 window.URL は利用できない
  • 11. File API のインターフェイスの説明 - 1 FileList <input type="file" multiple /> で指定されたファイル の一覧 Blob "データ"を扱うインターフェイス 範囲を指定してバイナリのチャンクを取得できる Fileの親インターフェイス File ファイル名と最終更新日時の取得
  • 12. File API のインターフェイスの説明 - 2 FileReader / FileReaderSync エンコーディングを指定してテキストとして読み込むこと ができる バイナリデータとして読み込むことができる URI scheme Blob のURLを生成することができる 選択されたファイルのプレビューなど
  • 13. 注意事項 // プレフィックスが必要な場合があります var BlobBuilder = window.BlobBuilder || window.MozBlobBuilder || window.WebKitBlobBuilder; var URL = window.URL || window.webkitURL; var requestFileSystem = window.requestFileSystem || window.webkitRequestFileSystem;
  • 15. File API を使ったコード $('#show_file').submit(function() { for (var i = 0; i < this.file.files.length; i++) { var file = this.file.files[i]; print('name:' + file.name); print('size:' + file.size); print('type:' + file.type); if (isImage(file.type)) { printImage(URL.createObjectURL(file)); } } return false; });
  • 17. Drag and drop は?
  • 19. Drag and drop API function receive(event, element) { var data = event.dataTransfer.items; for (var i = 0; i < data.length; i += 1) { if ( (data[i].kind == 'file') && (data[i].type.match('^image/')) ) { var img = new Image(); img.src = URL.createObjectURL(data[i].getAsFile()); element.appendChild(img); } } }
  • 20. File API: Writer とは ファイルに書き込むための仕様 File API で定義されている File/Blob は変更すること ができなかった サポートしているブラウザ (全ての機能が使えるわ けではない) Firefox 6以降 Google Chrome 9以降 (起動オプションが必要) --unlimited-quota-for-files --allow-file-access-from-files
  • 21. File API: Writer のインターフェイス BlobBuilder FileSaver FileWriter FileWriterSync
  • 22. File API: Writer のインターフェイスの説明 BlobBuilder バイナリデータの構築 FileSaver Blob をファイル名を指定して保存 FileWriter / FileWriterSync length, position write, seek, truncate
  • 23. File API: Writer を使ったコードのイメージ var bb = new BlobBuilder(); for (var i = 0; i < rows.length; i++) { var row = rows[i]; bb.append(createCSVRow(row)); } // window.saveAs は 2011/7/23 時点ではまだ利用できません var fileSaver = window.saveAs(bb.getBlob('text/csv'), 'date.csv');
  • 24. File API: Directories and System とは ファイルシステムにアクセスするための仕様 ただし、任意のファイルにアクセスすることはできない データのストレージとして利用することができる オリジン毎のサンドボックスが用意される オリジン = プロトコル + ドメイン + ポート サポートしているブラウザ Google Chrome 9以降 (オプションを付けると利用可 能) --unlimited-quota-for-files --allow-file-access-from-files
  • 25. File API: D & S のインターフェイス LocalFileSystem / LocalFileSystemSync FileSystem Entry DirectoryEntry DirectoryReader FileEntry
  • 26. File API: D & S でファイルを保存
  • 27. File API: D & S でファイルを保存 - 1 $('#save_file').submit(function() { for (var i = 0; i < this.file.files.length; i++) { saveFile(this.file.files[i]); } return false; });
  • 28. File API: D & S でファイルを保存 - 2 function saveFile(selected) { requestFileSystem(PERSISTENT, 1024 * 1024, function(fs) { printAnchor(fs.root.toURL()); fs.root.getDirectory('data', { create: true }, function(dir) { printAnchor(dir.toURL()); dir.getFile(selected.name, { create: true }, function(file) { printAnchor(file.toURL());
  • 29. File API: D & S でファイルを保存 - 3 file.createWriter(function(writer) { writer.onwrite = function(e) { if (isImage(selected.type)) { printImage(file.toURL()); } }; writer.onerror = function(e) { log('error: ' + e); }; var bb = new BlobBuilder(); bb.append(selected); writer.write(bb.getBlob()); });
  • 30. File API: D & S でファイルの一覧を取得 - 1 $('#find').click(function() { requestFileSystem(PERSISTENT, 1024 * 1024, function(fs) { traverse(fs.root); } ); return false; });
  • 31. File API: D & S でファイルの一覧を取得 - 2 function traverse(dir) { var reader = dir.createReader(); reader.readEntries( function(entries) { for (var i = 0; i < entries.length; i++) { var entry = entries[i]; printAnchor(entry.toURL()); if (entry.isDirectory) { traverse(entry); } } }, function(e) { log('error: ' + e); } ); }
  • 32. Writer & Directories and System の使い所 ログの保存 追記していくことができるので "moveTo" などでローテーションもできそう メールアプリケーションのキャッシュ 大きなファイルを保存することができる CMS のオフラインでの下書き機能 ストレージ的な利用
  • 36. Web Storage との比較 モダンなブラウザでは基本的には利用可能 保存できるデータの容量が基本5Mまで StorageEvent が使える 変更の検知 簡単 setItem / getItem 仕様上はオブジェクトをそのまま保存できる 2011/7/23時点ではオブジェクトを保存できるブラ ウザはない
  • 37. まとめ File API: Writer & Directories and System ファイルシステムをストレージとして利用可能にする API ウェブアプリケーションの可能性が広がる 大きなファイルを扱うアプリケーション オフラインで編集を行うアプリケーション
  • 38. ソースコード File API https://gist.github.com/dad2bb6bd1061ab712f7 File API: Writer & Directories and System https://gist.github.com/f6e62d8416ea4bdd0fe4