Hatena::ブログ(Diary)

pd @ hatenadiary このページをアンテナに追加 RSSフィード

2009-10-25 [メモ][AIR][javascript]WEB上のファイルをローカルに保存する方法 このエントリーを含むブックマーク このエントリーのブックマークコメント

地味にFlex用かなんかのしかググっても見つからなかったので、

javascriptでやる方法を書いてみる。

AIRAliases.jsが読み込まれている前提なので、

無い場合は、Aliasを設定してやらなきゃだめですよ。

 <script type="text/javascript" src="lib/air/AIRAliases.js"></script>
 


  /*
   * 指定したURLの読み込みに成功した時に実行される。
   * 指定したファイルを読み込んでから、
   * writeFile()を呼び出す。
   */
  function urlLoaded(event) {
   urlStream.readBytes(fileData, 0, urlStream.bytesAvailable);
   writeFile();
  }
  /*
   * 読み込まれたデータを書き出す。
   * filenameで指定したファイル名で、デスクトップへ保存する。
   * マイドキュメントへ保存する場合は、
   * desktopDirectoryをdocumentsDirectoryに書き換える。
   */
  function writeFile() {
   var filename = "test.gif";
   var file = air.File.desktopDirectory.resolvePath(filename);
   var fileStream = new air.FileStream();
   fileStream.addEventListener(air.Event.CLOSE, fileClosed);
   fileStream.open(file, air.FileMode.WRITE);
   fileStream.writeBytes(fileData, 0, fileData.length);
   fileStream.close();
  }
  /*
   * ファイルを閉じる。特に意味は無いけど、無いときっとだめなんだろうな。
   */
  function fileClosed(event) {
   a = 0;
  }
  /*
   * urlStringに、ダウンロードしたいファイル名を指定する。
   */
  var urlString = "http://www.dinorose.net/src/h1.gif";
  var urlReq = new air.URLRequest(urlString);
  var urlStream = new air.URLStream();
  var fileData = new air.ByteArray();
  urlStream.addEventListener(air.Event.COMPLETE, urlLoaded);
  urlStream.load(urlReq);
 </script>

まぁ、これで動くんだけど、

jQueryで$.getJSON()して取得した画像のURLとか投げると、

なんか動かない。謎。