IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Flex Discussion :

Enregistrer une image sur un serveur


Sujet :

Flex

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 134
    Points : 44
    Points
    44
    Par défaut Enregistrer une image sur un serveur
    Bonjour, voila je développe un outil de dessin.
    Une fois que l'utilisateur a fini son dessin, il peut l'enregistrer. Pour cela, je convertit, mon canevas qui accueille mon dessin, en image JPEG :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var jpgSource : BitmapData = new BitmapData (canvas.width,canvas.height);
    jpgSource.draw(canvas);
    var jpgEncoder:JPEGEncoder = new JPEGEncoder(85);
    var jpgStream:ByteArray = jpgEncoder.encode(jpgSource);
    JE voudrais savoir maintenant comment envoyé cette image JPEG qui se trouve dans mon application, sur mon serveur dans un dossier bien spécifique!

    merci de votre aide

    ps: dois je passé par PHP?

  2. #2
    Membre régulier Avatar de ouaqa
    Profil pro
    Développeur Web
    Inscrit en
    Avril 2009
    Messages
    95
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2009
    Messages : 95
    Points : 100
    Points
    100
    Par défaut
    hello,
    Il se trouve que je viens à l'instant de résoudre ce problème pour mon application.

    J'utilise AMFPHP pour ma connexion au serveur (PHP).
    Le flux est envoyé via un remote object géré par la classe LCCoreConnectionManager.

    voici le code d'envoi de l'image (avec en bonus, la création d'un snapshot d'un displayObject).

    fonction createSnapshot. la partie qui correspond à la création puis à la compression du byteArray :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    public function takeSnapshot() : void
    {
    	var fondActuel : LCFonds = this.fond ;
     
     
    	this.setFonds(LCConstants.FOND_UNI_TYPE , 0xFFFFFF ) ;
    	var snapShot : ImageSnapshot = ImageSnapshot.captureImage(this.graphicElement) ;
     
    	this.setFonds(fondActuel.VOFondType.libelle,fondActuel.couleur_primaire,fondActuel.couleur_secondaire , fondActuel.source);
     
    	var connection : LCCoreConnectionManager = LCCoreConnectionManager.getInstance() ;
     
    	var compressedByteArray : ByteArray = snapShot.data ;
    	compressedByteArray.compress() ;
    	connection.createMaquetteSnapshot(compressedByteArray , takeSnapshotResult , takeSnapshotFault ) ;
    }
    cette partie ne t'es pas vraiment utile (à part pour l'instruction compress peut-etre).

    Ensuite, la fonction createMaquetteSnapshot :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    public function createMaquetteSnapshot (AMaquetteSnapShot : ByteArray ,
    		 			AResultFunction : Function ,
    					AFaultFunction : Function) : void
    {
     	if (serverRemoteObject === null)
    	{ this.createServerRemoteObject() ; }
     
    	this.setToolBoxSource();
     
    	serverRemoteObject.createFileFromByteArray.addEventListener(FaultEvent.FAULT,createMaquetteSnapshotFaultResult);
    	serverRemoteObject.createFileFromByteArray.addEventListener(ResultEvent.RESULT,createMaquetteSnapshotResult);
     
    	this.onCreateSnapShotFaultFunction = AFaultFunction ;
    	this.onCreateSnapShotFunction = AResultFunction ; 
     
    	serverRemoteObject.createFileFromByteArray(AMaquetteSnapShot , "png");
    }
    Jusque-là, rien de bien original donc mais voici la partie intéressante : le côté serveur.

    fonction createFileFromByteArray
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    /**
     * 
     * écris le contenu de $rawData dans un fichier de type "fileType".
     * Aujourd'hui, cette fonction n'écris que dans le repertoire maquetteSnapshot de l'application.
     * 
     * @param $rawData : un byteArray fournis par le client flash.
     * @param $fileType : le type de fichier 
     * 
     * @return unknown_type
     */
    public function createFileFromByteArray ($rawData , $fileType)
    {
    	$fileContent = $rawData->data ;
     
    	try 
    	{ $fileContent = gzuncompress ($fileContent) ; }
    	catch (Exception $AnError)
    	{ throw new CoreException($AnError->getMessage()." - ".$AnError->getCode()); }
     
    	$fileName = time() . "." . $fileType ;
     
    	try
    	{ $finalFile = fopen(PATH_COMMON . "maquetteSnapshot/" . $fileName , wb ) ; }
    	catch (Exception $AnError)
    	{ throw new CoreException($AnError->getMessage()." - ".$AnError->getCode()); }
     
    	try
    	{ 
    		$write = fwrite ($finalFile , $fileContent) ; 
    		fclose ($finalFile);
    	}
    	catch (Exception $AnError)
    	{ throw new CoreException($AnError->getMessage()." - ".$AnError->getCode()); }
     
    	return ($write != false);	
    }
    la partie intéressante est l'instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $fileContent = gzuncompress ($fileContent) ;
    Tu va décompresser le contenu du byteArray compressé côté flex afin de l'écrire via fwrite.

    Enfin, pense à ajouter un fichier de régulation crossDomain.xml dans le dossier où tu stocke tes images si tu as besoin de les charger plus tard dans le client flex. Les applications flash ne peuvent pas accéder aux dossiers du serveur autrement.

    exemple de crossdomain.xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <?xml version="1.0"?>
    <!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
    <cross-domain-policy>
    	<allow-access-from domain="192.168.1.9/*"/>
    	<allow-access-from domain="localhost/*"/>
    </cross-domain-policy>
    voila, j'espère que ça te sera utile. J'ai bien galéré parce-que je ne compressais pas mon byteArray avant de l'envoyer. Du coup l'instruction gzuncompress paniquais et tout le reste du script partais en sucette.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 134
    Points : 44
    Points
    44
    Par défaut
    Je viens aussi de résoudre mon problème avec ce post très simple :
    http://kbala.com/save-text-as-an-image-in-flex/

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WD14E] enregistrer une image sur un serveur MySql
    Par Sergeras dans le forum WinDev
    Réponses: 11
    Dernier message: 07/08/2012, 17h21
  2. uploader une image sur le serveur
    Par kespy13 dans le forum Langage
    Réponses: 5
    Dernier message: 07/04/2006, 20h01
  3. [Image]Stockage d'une image sur un serveur
    Par zoby43 dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 23/03/2006, 11h42
  4. Réponses: 3
    Dernier message: 21/10/2005, 09h54
  5. Enregistrement d'une image sur le serveur
    Par MHI dans le forum Langage
    Réponses: 3
    Dernier message: 07/04/2005, 15h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo