2009-06-08 5 views
0

Im chargement des images dans Flash et en utilisant JPGEncoder pour coder l'image à un ByteArray et l'envoyer à AMF PHP qui écrit le bytearray dans un fichier. Tout cela semble fonctionner correctement et je peux très bien télécharger le fichier résultant dans Photoshop CS4. Lorsque je tente de l'ouvrir à partir du bureau ou ouvrez-le dans Flash le travail ne marche pas ... Picasa mon navigateur d'image par défaut, dit « non valide »Pourquoi JPGEncoded bytearray est-il envoyé d'AS3 à AMFPHP, entraînant une image invalide?

Voici le code que je l'utilise pour écrire le bytearray dans un fichier -

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

Ça y est ... J'utilise la classe NetConnection pour me connecter et appeler le service, dois-je dire Im envoyer des données jpg? J'ai supposé que JPGEncoder s'en occupait. Comment puis-je valider le bytearray avant d'écrire le fichier? Ai-je besoin de définir le type MIME ou quelque chose?

Merci - voici quelques 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

Je ne pourrais pas obtenir ceci pour fonctionner !! :(... alors maintenant j'envoie l'image à une vieille page PHP qui écrit le fichier sans problème ... :) – undefined

Répondre

1

Votre problème est dans votre service PHP. En AMFPHP les données POST est extrait, donc ce que vous avez besoin dans votre script AMFPHP UploadService est une fonction qui accepte les deux arguments d'entrée dans votre _uploadService.call --jpg_binary et currentImageFilename-- comme ceci:

<?php 
class UploadService { 

    function receiveByteArray($ba, $filename) { 

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