본문 바로가기

공부방/Flex

[Flex] Flash Player 10에서 로컬 파일을 읽고 쓰는 방법

원본 링크 : (Reading and Writing Local Files in Flash Player 10)
http://www.mikechambers.com/blog/2008/08/20/reading-and-writing-local-files-in-flash-player-10/

One of the new features in Flash Player 10 are new ActionScript FileReference APIs that allow Flash content 
to directly read and write data to the user’s system.
Flash Player 10의 새로운 기능중 하나는 플래시 컨텐츠(.swf 파일을 의미하는듯)가 유져 시스템에 데이터를 직접 읽고 쓰게 해주는 새로운 ActionScript File Reference API들이다.

Prior to Flash Player 10, in order to read or write a file to the user’s system, Flash content would first have to bounce it off of a server, and then load it back to the users system before it could be accessed. This was not only a hassle to program, but added additional application latency and resource usage.
Flash Player 10 이전에서는 유저 시스템에 파일을 읽거나 쓰기 위해서는 플래쉬 컨텐츠가 우선 서버에 반응을 살피고, 플레시 컨텐츠가 접근하기 이전에 유져 시스템의 파일을 다시 로드 한다. 이것은 프로그램 혼란뿐 아니라 추가적인 응답 지연과 리소스 사용을 가중시킨다.

The new functionality is achieved through the addition of two new APIs on the FileReference class:
그 새로운 기능은 FileReference 클래스의 새롭게 추가된 두개의 API를 통해서 해결된다.

FileReference.load() : Loads data from a file selected by the user.(유저에 의해서 골라진 파일로 부터 데이터를 로드한다.)
FileReference.save() : Saves data to a file location selected by the user.(유저에 의해서 골라진 위치에 파일을 저장한다.)

A couple of points to keep in mind:
(기억해둬야 할 몇개의 포인트)

  • The load() and save() APIs can only be called in response to user interaction (such as a button click). (load, save API는 사용자의 액션(버튼을 클릭하는것과 같은)에 대한 응답으로 호출되어진다. )
  • The locations of the loaded and save files are not exposed to ActionScript. (로딩되는 로케이션과 저장파일들은 ActionScript에게 노출되어지지 않는다)
  • The APIs are asynchronous (non-blocking). (API들은 비동기적이다)

Below are two examples that show how to use the APIs. 
(두개의 API를 어떻게 사용하는지는 아래의 예제 2개를 보라)
The examples use Flex for the UI, but the ActionScript is the same regardless of whether you are using Flex or not. The examples are fully commented.
(예제들은 UI를 위해서 Flex를 사용했지만, ActionScript는 네가 플렉스를 사용하던지 말건지 상관없이 같다. 그리고 예제는 모두 코맨트가 달려있다)

Read a file from the users system:
 



	
	
		
	
	
	
	
	



Write a file to the users system:


	
	
		 0);
			}
			
			//called when the user clicks the load file button
			private function onSaveClick():void
			{
				//create the FileReference instance
				fr = new FileReference();
				
				//listen for the file has been saved
				fr.addEventListener(Event.COMPLETE, onFileSave);
				
				//listen for when then cancel out of the save dialog
				fr.addEventListener(Event.CANCEL,onCancel);
				
				//listen for any errors that occur while writing the file
				fr.addEventListener(IOErrorEvent.IO_ERROR, onSaveError);
				
				//open a native save file dialog, using the default file name
				fr.save(inputField.text, DEFAULT_FILE_NAME);
			}
			
			/***** File Save Event Handlers ******/
			
			//called once the file has been saved
			private function onFileSave(e:Event):void
			{
				trace("File Saved");
				fr = null;
			}
			
			//called if the user cancels out of the file save dialog
			private function onCancel(e:Event):void
			{
				trace("File save select canceled.");
				fr = null;
			}
			
			//called if an error occurs while saving the file
			private function onSaveError(e:IOErrorEvent):void
			{
				trace("Error Saving File : " + e.text);
				fr = null;
			}
		]]>
	
	
	
	
	
	


In addition to the events shown in the examples above, the following events are also broadcast by the APIS:
(위의 예제에서 보여진 이벤트들 외에도 다음의 이벤트들 또한 API 에 의해서 발생할수 있다.)

ProgressEvent.PROGRESS
 : Gives progress on the reading or writing of the file (파일을 읽고 쓰는동안의 프로그레스 상태에 대해서 이벤트가 발생한다)
Event.OPEN : Broadcast when the file is opened for reading or writing. (파일을 읽고 쓰기 위해서 열었을때 이벤트가 발생한다)

While it will also be possible to use these APIs in Adobe AIR, in general, you will want to use the AIR File APIs as they provide more functionality and flexibility. (일반적으로 AIR에서 이런 API들을 사용할수 있지만, 사용자는 더많은 유연성과 기능을 제공하는 AIR FILE API를 사용하게 될꺼야..)