2009-06-08 11 views
0

Im Laden von Bildern in Flash und mit JPGEncoder das Bild in ein ByteArray zu kodieren und dies an AMF PHP zu senden, die das Bytearray in eine Datei schreibt. Dies scheint alles korrekt zu funktionieren und ich kann die resultierende Datei in Photoshop CS4 absolut gut herunterladen. Wenn ich versuche, es von dem Desktop zu öffnen oder wieder in Flash öffnen funktioniert nicht ... Picasa meines Standard-Bild-Browser sagt „Ungültig“Warum wird JPGEncoded Bytearray von AS3 zu AMFPHP gesendet, was zu einem ungültigen Bild führt?

Hier ist der i-Code verwenden, um die bytearray in eine Datei zu schreiben -

$ jpg = $ GLOBALS ["HTTP_RAW_POST_DATA"]; file_put_contents ($ filename, $ jpg);

Das ist es ... Ich benutze die NetConnection-Klasse, um den Dienst zu verbinden und anzurufen, muss ich sagen, dass ich jpg-Daten sende? Ich ging davon aus, dass JPGEncoder das erledigt hat. Wie kann ich das Bytearray vor dem Schreiben der Datei validieren? Muss ich den MIME-Typ oder etwas einstellen?

Dank - hier ist ein Code:

item.load(); 
function _onImageDataLoaded(evt:Event):void { 
    var tmpFileRef:FileReference=FileReference(evt.target); 
    image_loader=new Loader ; 
    image_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, _onImageLoaded); 
    image_loader.loadBytes(tmpFileRef.data); 
} 
function _onImageLoaded(evt:Event):void { 
bitmap=Bitmap(evt.target.content); 
bitmap.smoothing=true; 
if (bitmap.width>MAX_WIDTH||bitmap.height>MAX_HEIGHT) { 
    resizeBitmap(bitmap); 
} 
    uploadResizedImage(bitmap); 
} 
function resizeBitmap(target:Bitmap):void { 
    if (target.height>target.width) { 
     target.width=MAX_WIDTH; 
     target.scaleY=target.scaleX; 
    } else if (target.width >= target.height) { 
     target.height=MAX_HEIGHT; 
     target.scaleX=target.scaleY; 
    } 

} 
function uploadResizedImage(target:Bitmap):void { 
    var _bmd:BitmapData=new BitmapData(target.width,target.height); 
    _bmd.draw(target, new Matrix(target.scaleX, 0, 0, target.scaleY)); 
    var encoded_jpg:JPGEncoder=new JPGEncoder(90); 
    var jpg_binary:ByteArray=encoded_jpg.encode(_bmd); 
    _uploadService=new NetConnection(); 
    _uploadService.objectEncoding=ObjectEncoding.AMF3 
    _uploadService.connect("http://.../amfphp/gateway.php"); 
    _uploadService.call("UploadService.receiveByteArray",new Responder(success, error), jpg_binary, currentImageFilename); 

} 
+0

Ich konnte nicht bekommen das funktioniert !! :(... so jetzt sende ich das Bild auf eine einfache alte PHP-Seite, die die Datei schreibt kein Problem ... :) – undefined

Antwort

1

Ihr Problem in Ihrem PHP-Dienst ist. In AMFPHP wird die POST-Daten abstrahiert, so was Sie in Ihrem AMFPHP UploadService Skript brauchen, ist eine Funktion, die die beiden Eingabeargumente in Ihrem _uploadService.call akzeptiert --jpg_binary und currentImageFilename-- wie folgt aus:

<?php 
class UploadService { 

    function receiveByteArray($ba, $filename) { 

      $result = file_put_contents($filename, $ba->data); 
      if ($result == FALSE) { 
       trigger_error("File save failed"); 
      } 
    } 
} 
?>