Zurück   Flashforum > Flex und AIR > Flex programmieren

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 26-10-2011, 10:48   #1 (permalink)
Neuer User
 
Benutzerbild von Robbyn
 
Registriert seit: Oct 2011
Beiträge: 392
ByteArray splitten

Hallo,

ich habe da ein Upload script geschrieben womit man Bilder per Drag and Drop in ein Feld zieht und Flex einem das an ein PHP Script schickt und hochlädt.

So ich habe das mir so gedacht, da man ja nie weiß wie groß ein Bild/datei sein kann, splitte ich die Datei auf und schicke sie in Stücke an PHP, soweit so gut ich habe die Datei in ein ByteArray umgewandelt und diese enthält auch Daten. Nun möchte ich das so machen das ich das ByteArray z.b. in 40kb stücken an PHP sende und mir PHP auf der anderen Seite die Datei wieder zusammen setzt. Das zusammen setzen auf PHP's Seite ist kein Problem das läuft ohne Probleme nur wie Splitte ich das ByteArray in 40kb Teile?!

Hier mal mein Versuch wie ich es versucht habe:

Code:
<fx:Script>
		<![CDATA[
			import mx.controls.Alert;
			import mx.controls.Image;
			import mx.events.FlexEvent;
			import mx.managers.DragManager;
			import mx.rpc.CallResponder;
			import mx.rpc.events.ResultEvent;
			
			private var UploadCall:CallResponder	=	new CallResponder();
			private var UploadCall2:CallResponder	=	new CallResponder();
			
			private var Channel_1:Boolean			=	true;
			private var Channel_2:Boolean			=	true;
			
			private var i:int = 0;
			private var z2:int = 0;
			private var x2:int = 0;
			private var d:int = 0;
			private var maxSize:uint;
			private var GlobalFile:File;
			
			protected function windowedapplication1_creationCompleteHandler(event:FlexEvent):void
			{
				this.addEventListener(NativeDragEvent.NATIVE_DRAG_ENTER,onDragIn);
				this.addEventListener(NativeDragEvent.NATIVE_DRAG_DROP,onDrop);
			}
			
			public function onDragIn(event:NativeDragEvent):void{
				DragManager.acceptDragDrop(this);
			}
			
			public function onDrop(event:NativeDragEvent):void{
				
				this.removeAllElements();
				var dropfiles:Array	=	event.clipboard.getData(ClipboardFormats.FILE_LIST_FORMAT) as Array;
				
				for each(var file:File in dropfiles){
					switch(file.extension)
					{
						case 'ai':
						case 'pdf':
						case 'psd':
						case 'gif':
						case 'jpg':
						case 'png':
							
							UploadCall.addEventListener(ResultEvent.RESULT,resultUpload);
							UploadCall2.addEventListener(ResultEvent.RESULT,resultUpload2);
							
							var ba:ByteArray		=	new ByteArray();
							var stream:FileStream	=	new FileStream();
							stream.open(file, FileMode.READ);
							stream.readBytes(ba);
							stream.close();
							
							GlobalFile	=	file;
							maxSize		=	ba.bytesAvailable;
							
							allUploaded(ba.bytesAvailable);
							//allUploaded(file,file.size);
							
						break;
						default:
							trace(file.extension);
						break;
					}
				}
			}
			
			private function resultUpload(event:ResultEvent):void{
				
				Channel_1 = true;
				trace("Channel 1 wieder auf true");
				if(i < maxSize){
					allUploaded(maxSize);
				}
				
				
			}
			
			private function resultUpload2(event:ResultEvent):void{
				Channel_2 = true;
				trace("Channel 2 wieder auf true");
				if(i < maxSize){
					allUploaded(maxSize);
				}
				
				
			}
			
			
			protected function allUploaded(size:uint):void{
				
				var bz:ByteArray		=	new ByteArray();
				var inStream:FileStream	=	new FileStream();
				
				
				
				d = i + (20 * 1024);
				
				if(i < size){
					
					if(d < size){
						++x2;
						inStream.open(GlobalFile, FileMode.READ);
						inStream.readBytes(bz,i,d);
						inStream.close();
						trace("Erstellen: i: "+i+" und d: "+d);
					}else{
						++x2;
						inStream.open(GlobalFile, FileMode.READ);
						inStream.readBytes(bz,i,size);
						inStream.close();
						trace("Ende: i: "+i+" und size: "+size);
					}
					
					i = i + (20 * 1024);
				}
				
				if(Channel_1 == true){
					UploadCall.token	=	UploadData.upload(GlobalFile.name,bz);
					Channel_1 = false;
			
				}/* else if(Channel_2 == true){
					UploadCall2.token	=	UploadData.upload(file.name,bz);
					Channel_2 = false;
				}  */
			}
		]]>
	</fx:Script>
Mit diesem Script kann ich zwar das ByteArray teilweise aufsplitten aber nicht so wie ich es haben möchte denn er splittet nicht richtig, er gibt mir immer die Daten von Anfang an bis zu einen von mir angegeben Punkt aus, ich möchte es aber von einen mir angegeben anfangspunkt bis hin zu einen von mir angegeben endpunkt ausgeben lassen.
Robbyn ist offline   Mit Zitat antworten
Alt 26-10-2011, 15:59   #2 (permalink)
Neuer User
 
Registriert seit: Mar 2009
Ort: Braunschweig
Beiträge: 184
Zitat:
Zitat von Robbyn Beitrag anzeigen
Hallo,

ich habe da ein Upload script geschrieben womit man Bilder per Drag and Drop in ein Feld zieht und Flex einem das an ein PHP Script schickt und hochlädt.
...
Mit diesem Script kann ich zwar das ByteArray teilweise aufsplitten aber nicht so wie ich es haben möchte denn er splittet nicht richtig, er gibt mir immer die Daten von Anfang an bis zu einen von mir angegeben Punkt aus, ich möchte es aber von einen mir angegeben anfangspunkt bis hin zu einen von mir angegeben endpunkt ausgeben lassen.
Sicher mit der Diagnose ?
So wie ich das lese, baut er immer größere Stücke mit wachsendem Offset in 'bz'.
Ich sehe den Fehler jedenfalls in den readBytes-Aufrufen:
Code:
    //inStream.readBytes(bz,i,d);
    inStream.position = i;
    inStream.readBytes(bz,0,20*1024);
Code:
    //inStream.readBytes(bz,i,size);
    inStream.position = i;
    inStream.readBytes(bz,0,size-i);
Nicht getestet. Ich kenne ByteArray, aber nicht FileStream.

Grüße,
Matthias Kievernagel
mkiever ist offline   Mit Zitat antworten
Alt 27-10-2011, 07:44   #3 (permalink)
Neuer User
 
Benutzerbild von Robbyn
 
Registriert seit: Oct 2011
Beiträge: 392


Danke es funktioniert jetzt perfekt, hatte wirklich was mit den ByteArrays zu tun. Hatte wohl nicht ganz verstanden wie das funktioniert .

Danke dir nochmals dafür
Robbyn ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
ByteArray to Bitmapdata Jochi ActionScript 3 3 22-02-2010 17:45
ByteArray speichern Jochi ActionScript 3 5 17-02-2010 22:02
ByteArray auslesen tobee ActionScript 3 1 03-12-2009 09:11
ByteArray in SOAP Bartolomé ActionScript 3 8 25-07-2009 17:07
ByteArray aus NetStream? pink! ActionScript 3 0 26-03-2009 16:56


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:48 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2014 Marc Thiele