forked from: LoadImage

by umhr forked from LoadImage (diff: 26)
実験中

ローカルファイルの読み込みって
やったこと無かったので試した。
♥0 | Line 81 | Modified 2010-01-22 03:17:07 | MIT License
play

ActionScript3 source code

/**
 * Copyright umhr ( http://wonderfl.net/user/umhr )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/sQVS
 */

/*
実験中

ローカルファイルの読み込みって
やったこと無かったので試した。
*/
package
{
	import flash.display.Sprite;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.text.TextField;
	import flash.text.TextFormat;
	
	[SWF(backgroundColor="0x777777",width=465,height=465)]
	public class Main extends Sprite
	{
		public function Main()
		{
			var tf:TextField = new TextField();
			tf.defaultTextFormat = new TextFormat("_sans",36,0xCCCCCC);
			tf.text = "Stage上をクリックするとダイアログが開きます。\nテキストファイルを指定してください。";
			tf.wordWrap = true;
			tf.multiline = true;
			tf.width = stage.stageWidth;
			tf.autoSize = "left";
			tf.selectable = false;
			this.addChild(tf)
			stage.addEventListener(MouseEvent.CLICK,atClick);
		}
		private function atClick(event:MouseEvent):void{
			var loadFile:LoadFile = new LoadFile();
			loadFile.atComplete = atComplete;
			loadFile.Start();
		}
		private function atComplete(event:Event):void{
			//trace(event.target.data);
			while (this.numChildren > 0) {
				this.removeChildAt(0);
			}

			var tf:TextField = new TextField();
			tf.defaultTextFormat = new TextFormat("_sans",12,0xCCCCCC);
			tf.text = event.target.data;
			tf.wordWrap = true;
			tf.multiline = true;
			tf.width = stage.stageWidth;
			tf.autoSize = "left";
			tf.selectable = false;
			this.addChild(tf)

			//this.addChild(event.target.content);
		}
	}
}

import flash.display.Loader;
import flash.events.Event;
import flash.net.FileReference;
import flash.system.LoaderContext;
class LoadFile{
	private var _fileReference:FileReference;
	public var atComplete:Function = function(event:Event):void{};
	/**
	 * 開始
	 * 
	 */	
	public function Start():void
	{
		if(_fileReference){
			return;
		}
		_fileReference = new FileReference();
		_fileReference.browse();
		_fileReference.addEventListener(Event.SELECT,atSelect);
	}
	/**
	 * ファイルの選択が完了すると動く
	 * @param event
	 * 
	 */	
	private function atSelect(event:Event):void{
		_fileReference.removeEventListener(Event.SELECT,atSelect);
		_fileReference.addEventListener(Event.COMPLETE,atFileComplete);
		_fileReference.load();
	}
	/**
	 * 選択したファイルを読み込み完了すると動く
	 * @param event
	 * 
	 */	
	private function atFileComplete(event:Event):void{
		_fileReference.removeEventListener(Event.COMPLETE,atFileComplete);
		var loader:Loader = new Loader();
		var array:Array = _fileReference.name.split(".");
		if(array[array.length-1] == "as" ||array[array.length-1] == "txt"){
			atBytesComplete(event)
		}else{
			loader.loadBytes(event.target.data,new LoaderContext());
			loader.contentLoaderInfo.addEventListener(Event.COMPLETE,atBytesComplete);
		}
	}
	/**
	 * 読み込んだファイルのバイトアレイを変換完了で動く
	 * @param event
	 * 
	 */	
	private function atBytesComplete(event:Event):void{
		event.target.removeEventListener(Event.COMPLETE,atBytesComplete);
		atComplete(event);
	}
}