Aide - Recherche - Membres - Calendrier
Version complète : Upload fichier avec flex amfphp
Centre de Formation Flash - Forums Adobe Flash > Rich media et intégration > Flex
Atila67
Bonjour,

Je cherche un exemple d'upload de fichiers avec flex et amfphp.

Merci
Tonic
Salut,

le principe est le même qu'en AS2.

Il te suffit d'utiliser FileReference, et d'appeler un script php qui gère l'upload.

http://livedocs.adobe.com/flex/2/langref/f...eReference.html
Atila67
Il y a un bout de code très interessant ici :

http://www.flex-nation.com/index.php?2006/...chier-avec-flex

Mais j'ai un souci avec

CODE
ary.push(ff);
file.browse(ary);


Accès à la propriété non définie.
Tonic
CITATION(Atila67 @ Apr 2 2007, 08:28 AM) *

CODE
ary.push(ff);
file.browse(ary);


Accès à la propriété non définie.


Pour quelle variable cette erreur s'affiche?

Montre nous un peu plus de code...
Atila67
Accès à la propriété non définie ff
Accès à la propriété non définie tab
Accès à la propriété non définie fichier
Accès à la propriété non définie tab





CODE
import flash.net.FileReference;
import flash.net.FileFilter;
import mx.events.CloseEvent;

var fichier:FileReference = new FileReference();
// La description qui apparaîtra dans la fenêtre de Browse
var fDesc:String = "Office (*.doc, *.xls, *.ptt, *.pdf, *.txt)";

// Les extensions utilisées
var fTypeExt:String = "*.doc; *.xls; *.ptt; *.pdf, *.txt";

// Notre filtre, composé de la description et des extensions
var ff:FileFilter = new FileFilter(fDesc,fTypeExt);
// Le tableau de filtre à passer à la méthode Browse
var tab:Array = new Array();

tab.push(ff);
fichier.browse(tab);

public  function fileSelected(e:Event):void
{
  Alert.show("Upload " + fichier.name + " ?",
                  "Upload Confirmation",
                   Alert.YES|Alert.NO,
                   null,
                   proceedWithUpload);
}
        

public function proceedWithUpload(e:CloseEvent):void
{
var req:URLRequest = new URLRequest("http://www.xxxx.com/upload.php");
    
            
     if (e.detail == Alert.YES)
     {
    fichier.upload(req);
     }
            
}
Tonic
Tu devrais mettre en place une classe pour ce code...

Sinon, comme ceci ca devrait être mieux

Actionscript
 
public var fichier:FileReference = new FileReference();
// La description qui apparaîtra dans la fenêtre de Browse
public var fDesc:String = "Office (*.doc, *.xls, *.ptt, *.pdf, *.txt)";

// Les extensions utilisées
public var fTypeExt:String = "*.doc; *.xls; *.ptt; *.pdf, *.txt";

// Notre filtre, composé de la description et des extensions
public var ff:FileFilter = new FileFilter(fDesc,fTypeExt);
// Le tableau de filtre à passer à la méthode Browse
public var tab:Array = new Array();
 
init();
public function init():void
{
tab.push(ff);

fichier.browse(tab);
}
 
Atila67
Tonic j'ai trouvé un exemple 1000 x mieux wink.gif http://web.infostrates.fr/infolabs/demo/srcview/index.html

Je dois juste régler un souci, le fichier n'est pas uploadé alors que dans flex j'ai une réponse positive.
Tonic
CITATION(Atila67 @ Apr 2 2007, 08:57 AM) *

Je dois juste régler un souci, le fichier n'est pas uploadé alors que dans flex j'ai une réponse positive.


Ouai, les messages de retour faut se méfier...

Es tu sûr que ton script php est bien appelé?

Le plus simple pour débugger un script utilisé par Filerefence (puisqu'il est impossible de faire des echo ou autre), est d'écrire dans un fichier. Par exemple, dans ton script php tu écrris dans un fichier texte le nom de l'image recu par exemple.
Une fois que ton FileReference a été appelé, il te suffit de regarder dans ton fichier texte si le texte a été écrit.
Atila67
J'ai débugué l'erreur provient de php. Il faut faire très attention aux extensions autorisés car ça bug...
Tonic
CITATION(Atila67 @ Apr 2 2007, 09:08 AM) *

J'ai débugué l'erreur provient de php. Il faut faire très attention aux extensions autorisés car ça bug...


Qu'est ce qui bug?

Tout dépend des extensions que tu autorises?

Il faut aussi peut être que tu testes la taille des fichiers, suivant ton serveur, il y a une taille limite autorisée... icon_wink.gif
Atila67
En fait c'est la fonction return_type(Autodetect_file_type()); qui est null. Et le test est biensûr négatif...

Il y a un souci dans cette fonction.
Tonic
Ouai, je sais pas si c'est une bonne idée d'utiliser cette source (du moin les scripts php). Il a fait quelque chose de compliqué juste pour ramener l'extension d'un fichier.

Donc au lieu d'avoir 50 lignes pour récupérer cette extension, on peut le faire en 2 lignes :

Php
<?php 
$table=explode(".",$fileName);
$extension = $table[(count($table)-1)];
echo $extension;
?>
Atila67
Oui c'est clair...
e-actif
Petite question bête :
AMFPHP peut traiter des données envoyées dans le $_POST ?
Tonic
CITATION(e-actif @ Apr 4 2007, 09:42 PM) *

Petite question bête :
AMFPHP peut traiter des données envoyées dans le $_POST ?


Ca n'aurrait pas grand intérêt de savoir si amf peut traiter des variables envoyer en $_POST, puisque tu peux passer directement des variables dans la méthode call (variable : number, string, array, objet, etc.).

ex :

Actionscript
 
gateway.call("le_service", new Responder(fctRecieve, fctError),parametre1,parametre2);
 


Bref, en tout logique, si tu veux pouvoir utiliser des services amf via la méthode post, tu vas devoir devoir utiliser un script externe, qui lui, utilisera ta classe de service.
e-actif
je suis pas sûr de comprendre.
La question initiale était de savoir si on peut uploader des fichiers via AMFPHP.
Est ce qu'il y a un autre moyen que l'envoi par POST pour uploader des fichiers ( je ne parle pas de simples variables mais bien de fichiers) vers PHP ?

Ca donnerait quoi côté serveur ? Comment une classe php pourrait-elle récupérer un fichier envoyé par Flash via AMFPHP ? Faut utiliser un byteArray et reconstituer l'image côté serveur ?
Du coup çà m'interresse bien de savoir si oui ou non AMFPHP peut récupérer les données "POST" icon_wink.gif
Tonic
CITATION(e-actif @ Apr 5 2007, 02:57 PM) *

La question initiale était de savoir si on peut uploader des fichiers via AMFPHP.
Est ce qu'il y a un autre moyen que l'envoi par POST pour uploader des fichiers ( je ne parle pas de simples variables mais bien de fichiers) vers PHP ?


Bon j'ai comprit ta question dans 2 sens : upload un fichier local sur le serveur ou uploader une bitmap crée sous flash vers le serveur.

Réponse 1 :
Uploader un fichier via la méthode POST, ca ne veut rien dire.
La seule chose que tu peux faire, c'est envoyer l'url local de ton fichier via la méthode POST. Ensuite, tu as un script externe (php par exemple), qui va gérer l'upload de ton fichier.
Ou alors tu utilises FileRéférence pour l'upload, mais tu ne pourras pas directement utiliser une méthode de ton service pour gérer l'upload, tu devras d'abord invoquer un script externe, qui lui fera un appel à ton service amf.

Réponse 2 :
Si tu as créé une Bitmap sous flash, et que tu veux l'enregistrer sur ton serveur, tu peux effectivement envoyer toutes tes données par amf (il peut faire transiter n'importe quelle objet, y comprit un byteArray).

Il y a un très bel exemple ici :
http://www.quasimondo.com/archives/000572.php

Dans cet exemple, on sauvegarde en local au final, mais l'image a été évidement créé sur le serveur auparavant.
e-actif
en effet je raconte n'importe quoi ...
je voulais savoir si AMFPHP pouvait récupérer les variables $_FILES... et pas $_POST icon_redface.gif ( du coup je suis d'accord : on se fout de savoir si AMFPHP récupére ou pas les $post smile.gif )

J'ai quand même un début de réponse:

CITATION
tu utilises FileRéférence pour l'upload, mais tu ne pourras pas directement utiliser une méthode de ton service pour gérer l'upload, tu devras d'abord invoquer un script externe, qui lui fera un appel à ton service amf.


C'est ce que je pensais.

Par contre le deuxième exemple, celui de l'image générée par le serveur et renvoyée vers le client, m'amène quand même à penser que pour envoyer une image, on pourrait ne passer que par AMFPHP ( sans $_Files ). Mais çà demanderais de transformer toutes ses images en ByteArray côté client, et de les retransformer côté serveur ...
Je vais donc continuer à utiliser la méthode $_FILES ! icon_biggrin.gif

Pour finir, encore un truc q je comprends pas :
CITATION
La seule chose que tu peux faire, c'est envoyer l'url local de ton fichier via la méthode POST. Ensuite, tu as un script externe (php par exemple), qui va gérer l'upload de ton fichier.


Un fichier PHP qui récupére un fichier sur la machine du client ? T'aurais un exemple de code STP ?
Tonic
CITATION(e-actif @ Apr 5 2007, 04:10 PM) *

Un fichier PHP qui récupére un fichier sur la machine du client ? T'aurais un exemple de code STP ?


C'est le principe de FileReference, la méthode browse qui permet de sélectionner un fichier en local, puis la méthode upload qui permet de l'uploader sur le serveur...
aka_erazor
Faire ce genre de test sur les extensions de fichier est le meilleur moyen de se retrouver sur son serveur avec un fichier test.jpg qui sera en fait un script perl/php,...
Tonic
CITATION(aka_erazor @ May 22 2007, 09:46 AM) *
Faire ce genre de test sur les extensions de fichier est le meilleur moyen de se retrouver sur son serveur avec un fichier test.jpg qui sera en fait un script perl/php,...


On ne peut pas vraiment éviter ce genre de bidouille, si quelqu'un renome un fichier avec une extension différente, difficile de le savoir.

En utilisant "finfo_file", on peut peut être s'assurer du vrai type de fichier, ca reste à tester...
sampras
CITATION
En fait c'est la fonction return_type(Autodetect_file_type()); qui est null. Et le test est biensûr négatif...

Il y a un souci dans cette fonction.


tu peux me montrer le code modifie stp, car j ai beau faire des modifications ca ne marche toujours pas a moin que quelqu un me propose une autre solution pour uploader vers mon hebergeur
Tonic
CITATION(sampras @ Jul 6 2007, 02:44 PM) *
tu peux me montrer le code modifie stp, car j ai beau faire des modifications ca ne marche toujours pas a moin que quelqu un me propose une autre solution pour uploader vers mon hebergeur

Tu as essayé de mettre en oeuvre ce script php avec une formulaire php contenant un objet file.

Tu pourrais ainsi voir l'erreur renvoyée par php...
sampras
CITATION(Tonic @ Jul 6 2007, 04:10 PM) *
Tu as essayé de mettre en oeuvre ce script php avec une formulaire php contenant un objet file.

Tu pourrais ainsi voir l'erreur renvoyée par php...



Le probleme c'est que je ne maitrise pas grand chose en php, d'ailleur ce que tu viens de me dire c'est comme du chinois (enfin j exagere un peu), cela fait depuis ce matin que je suis en galere sur ce script php et c'est en train de me prendre la tete icon_evil.gif. C'est pour ca que je lui demandais sa solution comme il avait reussi ...
En tout cas merci d avoir repondu Tonic
Tonic
Construit juste un formulaire html, qui submit vers ta page php.

Ainsi, au lieu de ne pas pouvoir les erreur lorsque tu invoques ce script depuis flash, tu pourras voir les erreurs généré par php.
sampras
CODE
/*** YOUR PARAMS ****/
$repertoireDestination="[path to destination folder]";
$extension_permise=array(".jpg",".gif",".png",".pdf",".rtf",".png");
$nomDestination=goodname($_FILES["Filedata"]["name"]);


petite question ca c'est le fichier d'origine, $repertoireDestination="[path to destination folder]"; je met quoi dans cette partie, je suis completement pomé sad.gif
Tonic
Le dossier du serveur dans lequel tu veux que tes images soient uploadée.
sampras
ca marche enfin merci tonic.

Il ne reste plus qu'un petit probleme, je m explique:
j'envoie mes fichier sur www.monsite.fr/upload
quand je vais sur ce repetoire via internet je vois tous mes fichiers mais ne peu les afficher
le message est
CITATION
132
Forbidden
You don't have permission to access /upload/[upload]cairngorm2_rpc.pdf on this server.

Il faut que j'aille sur mon ftp active a la main les droit de lecture pour le public, pas pratique...

N y a t'il pas un moyen que la lecture soit possible par defaut sans aller l activer via filezilla?

ps: j ai essaye de mettre mon dossier upload en mode lecture mais ca n y change rien les nouveau fichier arrivant n'ont aucun droit
Tonic
salut,

tu pourras modifier les droits de lecture via chmod

http://www.manuelphp.com/php/function.chmod.php
sampras
CITATION(Tonic @ Jul 9 2007, 12:26 PM) *
salut,

tu pourras modifier les droits de lecture via chmod

http://www.manuelphp.com/php/function.chmod.php



chmod ("/upload/[upload]*", 0755);
chmod ("/upload/*", 0755);
chmod ("/upload/", 0755);

J'ai essaye ces 3 solutions en les ajoutants sur mon upload.php mais ca n'y fait rien, j ai du faire encore une erreure....
Tonic
Non tu dois parcourir chacun de tes fichiers qui est dans ton dossier, et faire le chmod dessus.
CODE
$folder = "upload";
$dossier = opendir($folder);
while ($fichier = readdir($dossier))
{
    if ($fichier != "." && $fichier != "..")
    {
        chmod($fichier,777);
    }
}
closedir($dossier);


Ca c'est pour tes fichier déjà uploadé.
Ensuite, pour tes autre fichiers, à chaque fois que tu fais upload, il te suffit de balancer le chmod sur le fichier uploadé.
sampras
Toujours le meme probleme meme avec ta solution, je continue a chercher..
Tonic
Quand précisément tu as ce message d'erreur?

sampras
CITATION(Tonic @ Jul 9 2007, 01:26 PM) *
Quand précisément tu as ce message d'erreur?



http://www.laurentleca.fr/VIP.html
http://www.laurentleca.fr/upload

Si tu veux tester le premier lien tu vas dasn stockage de fichier, apres tu vas sur le second il y a le fichier que tu as envoyes mais quand tu cliques dessus pour l'ouvrir --> message d'erreur
Je suis actuellement oblige de passe par filezilla pour pouvoir voir les fichiers envoyes

Tonic
J'ai uploadé une image, no problem, mais rien ne s'affiche dans l'album...

Sinon, peut etre que le site est rajouté dans tes sites de confiance (click droit sur le swf -> paramètres -> autoriser)
sampras
CITATION(Tonic @ Jul 9 2007, 01:54 PM) *
J'ai uploadé une image, no problem, mais rien ne s'affiche dans l'album...

Sinon, peut etre que le site est rajouté dans tes sites de confiance (click droit sur le swf -> paramètres -> autoriser)



Pour le fait que ca ne s'affiche pas dans l album c'est tout a fait normal ce que je t ai mis en ligne c'est une vieille version..
Sinon j ai verife pour le site de confiance il etait deja autoriser.
Bon je ne vais pas chercher plus loin pour le moment pour cette autorisation en lecture je le ferais a partir de filezilla manuellement on va dire que ca me permetra de controler ce que mettent les personnes...
Tonic
Quels genre de fichier tu upload?
sampras
CITATION(Tonic @ Jul 9 2007, 02:15 PM) *
Quels genre de fichier tu upload?


de tout, .jpg , .doc, .pdf ....
Tonic
c'est vraiment bizarre alors, en lecture, normalement il n'y a aucun problème pour charger une image par exemple dans un swf.

On peut voir ton script d'upload avec le chmod associé?
sampras
Oui je vous montrerais le code quand je me replongerais dedans
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'informations, la mise en page et les images, veuillez cliquer ici.
Invision Power Board © 2001-2008 Invision Power Services, Inc.