Javascriptでファイル処理
spidermonkeyで出来ないもんかとググってみたらなんとできるみたい.
色々試したけど, これが簡単で(・∀・)イイ!!
n9dさんのやられている通りにやれば大丈夫.
他の方法としては, Mozillaのソースから取ってくる(?)という方法もある. でも面倒.
まず, ここからダウンロード.
1.7が取れるのがこっちの良いところだね.
んで, このままmakeしたのではアウト.
ファイルアクセスできないのが出来あがる.
$ make -f Makefile.ref JS_HAS_FILE_OBJECT=1 JS_DIST=/home/khiker/local
こんな感じでやるようだけど, これはアウト. コンパイルでエラーがでる.
おそくらここでやっている風に書換えてあげれば出来るようになるのだと思う.
ここの情報を見付けたときに既に上のn9dさんの記事を見付けていて心折れてしまった.
コンパイルが本題じゃないしw
よって, これで出来るかは試してない.
んで, どうせだからとSWFのヘッダ情報を抜くのでもやってみようかなあと思って手を出したけどよーわからん.
var swf = ""; // swf object var compressed = 0; // 1: compressed 0: not compressed var file_version = 0; // version of macromedia flash var file_size = 0; // size of this file var movie_size = 0; var frame_rate = 0; var frame_count = 0; var file = new File( "/tmp/test.swf" ); if ( file.open("read") ){ swf = file.readAll(); swf = swf.toString(); file_size = file.size; } else { print( "File read error!\n" ); quit(); } file_version = swf.charCodeAt(3); compressed = (swf.charAt(0) == "C") ? 1 : 0; // 何故か数字が変ってしまう // openでtypeにbinaryを指定すると警告でるし… // よーわからん movie_size = String.concat( swf.charCodeAt(7).toString(16), swf.charCodeAt(6).toString(16), swf.charCodeAt(5).toString(16), swf.charCodeAt(4).toString(16) ); movie_size = parseInt( movie_size, 16 ); print( "version:" + file_version ); print( "compressed?: " + compressed ); print( "file_size: " + file_size ); print( "movie_size: " + movie_size ); if( file ){ file.close(); }
とりあえず, SWFが圧縮されてるとやっかいなので, それはflasmを使って解凍してやってやってみた.
ファイルの読み込みは上手くいくけどねーその後が…….
どうもmovie_sizeが合わんw
いったん文字列に変更したりしてんのが問題なんだろうかなと踏んでるけど解決法が今一思いつかん.
まあ, とりあえずRECTとか考えずに簡単にできるここまでで….
参考
更新時刻
2008年, 6月16日, 4:03