ActionScript 3 + Flash Player 10+ : LocalFileHelper

sábado, 27/03/2010 10:03 pm  

Neste post vou compartilhar com vocês um suporte que me é muito útil nos projetos que ando desenvolvendo, onde necessito abrir algum arquivo local da máquina do usuário da aplicação e posteriormente caso necessário salvar um arquivo…

LocalFileHelperComo comentado, em um projeto tive a necessidade de trabalhar com arquivos locais do usuário em uma aplicação Adobe Flex 3.5, para isto fiz uso da classe FileReference [métodos load e save] com a versão do Adobe Flash Player 10+, onde também foi incluso o suporte para exibir o progresso da leitura e escrita dos arquivos no computador local, conforme a imagem acima.

 

Segue o código da aplicação de teste vista na imagem:

?View Code ACTIONSCRIPT3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
<?xml version="1.0" encoding="utf-8"?>
<mx:VBox
	xmlns:mx="http://www.adobe.com/2006/mxml"
	width="400" height="300"
	creationComplete="init()" horizontalAlign="center">
 
	<mx:Script>
		<![CDATA[
			import com.erkobridee.flex.util.file.LocalFileHelper;
 
			import mx.controls.Alert;
 
			import com.erkobridee.flex.util.file.enum.*;
			import com.erkobridee.flex.util.file.events.*;
 
			//------------------------------------------------------------------
			private var localFileHelper:LocalFileHelper;
			//------------------------------------------------------------------
			private function init():void {
				localFileHelper = new LocalFileHelper( FileTypeFormat.FILE_FILTER_TEXT_TYPE );
 
				localFileHelper.addEventListener(LocalFileEvent.FILE_LOAD_BROWSE, onFileSelect);
				localFileHelper.addEventListener(LocalFileEvent.FILE_SAVE_BROWSE, function():void { trace("Save browse complete"); } );
				localFileHelper.addEventListener(LocalFileEvent.FILE_SAVE_SUCCESSFULLY, function():void { trace("Save complete!"); } );
				localFileHelper.addEventListener(LocalFileEvent.FILE_CANCEL, function():void { Alert.show("Cancel"); } );
				localFileHelper.addEventListener(LocalFileErrorEvent.FILE_ERROR, function():void { trace("file error") } );
 
				localFileHelper.addEventListener(LocalFileLoadProgressEvent.FILE_LOAD_PROGRESS, onLoadProgress);
				localFileHelper.addEventListener(LocalFileSaveProgressEvent.FILE_SAVE_PROGRESS, onSaveProgress);
 
			}
			//------------------------------------------------------------------
			private function loadFile():void {
				this.reset();
 
				localFileHelper.browse();
			}
 
			//------- SAVE
 
			private function saveFile():void {
 
				localFileHelper.save( output.text, "output.txt" );
 
				this.reset();
			}
 
			private function reset():void {
				loadProgressBar.setProgress(0,0);
				saveProgressBar.setProgress(0,0);
				output.text = "";
				System.gc();
			}
 
			//------------------------------------------------------------------
			// event handlers
			private function onFileSelect(event:LocalFileEvent):void {
				localFileHelper.addEventListener(LocalFileLoadedEvent.DATA_LOADED, onDataLoaded );
				localFileHelper.load();
			}
 
			private function onDataLoaded(event:LocalFileLoadedEvent):void {
				output.text = LocalFileHelper.convertByteArrayToText( event.byteLoaded );
			}
 
			private function onLoadProgress(event:LocalFileLoadProgressEvent):void {
				loadProgressBar.setProgress(event.done, event.total);
			}
 
			private function onSaveProgress(event:LocalFileSaveProgressEvent):void {
				saveProgressBar.setProgress(event.done, event.total);
			}
 
		]]>
	</mx:Script>
 
	<mx:TextArea
		id="output"
		width="100%" height="100%"/>
 
	<mx:HBox width="100%" horizontalAlign="center">
		<mx:Button label="Load" click="loadFile()"/>
		<mx:Button label="Save" click="saveFile()"/>
		<mx:Button label="Reset" click="reset()"/>
	</mx:HBox>
 
	<mx:Form>
		<mx:FormItem label="File load">
			<mx:ProgressBar id="loadProgressBar" mode="manual"/>
		</mx:FormItem>
 
		<mx:FormItem label="File save">
			<mx:ProgressBar id="saveProgressBar" mode="manual"/>
		</mx:FormItem>
	</mx:Form>
 
</mx:VBox>

 

Caso queria o projeto [LocalFileHelper] obs.: em Adobe Flex Builder 3

 

Essa funcionalidade foi uma adaptação do código pacialmente disponível no post: utility class to help reading/writing files in flash 10 devido a não encontrar o código disponível para o download, tive a necessidade de vasculhar e remontar o projeto.

, , , , , ,

Este post foi escrito por:

- que escreveu 500 post(s).


Entre em contato