Cfftp avec un composant

mandaillou Messages postés 53 Date d'inscription dimanche 26 novembre 2000 Statut Membre Dernière intervention 17 février 2006 - 6 déc. 2005 à 18:56
nickadele Messages postés 1251 Date d'inscription mercredi 7 août 2002 Statut Modérateur Dernière intervention 10 avril 2013 - 8 déc. 2005 à 15:15
Salut je voudrais faire un cfftp mais en passant par un composant.
J'ai le code suivant:

*** main.cfm ***

<cfftp action="open" server="#form.serveur#" username="#form.login#" password="#form.password#" connection="serveur1" timeout="600">
<cfinvoke component="fonction_test" method="ftp"
action="existsdir" connection="serveur1" directory="edengo_v3/concours">
<cfftp action="close" connection="serveur1">

**** fonction_test.cfc ***
<cfcomponent>
<cffunction name="ftp">
<cfargument name="action" required="yes">
<cfargument name="directory" required="no">
<cfargument name="connection" required="yes">
<cfftp action="#action#" connection="#connection#" directory="#directory#">
<cfset retour=#cfftp.ReturnValue#>
<cfreturn #retour#>
</cffunction>


</cfcomponent>

Problème : il me dit "
The connection attribute you specified, serveur1, is invalid or does not exist " mais si je fais la même chose sans passer par une fonction, ça marche.
Merci

Sylvain

9 réponses

cs_lfontaine Messages postés 203 Date d'inscription lundi 23 décembre 2002 Statut Membre Dernière intervention 11 mai 2006
6 déc. 2005 à 21:36
Salut,

Peut etre qu'il faut que tu ouvre et ferme la connection dans ton composant. essayes de creer plusieurs autre function pour ouvrir et fermer ta connection.

Laurent
0
mandaillou Messages postés 53 Date d'inscription dimanche 26 novembre 2000 Statut Membre Dernière intervention 17 février 2006
7 déc. 2005 à 11:53
J'ai essayé ça mais sans plus de réussite

<cfinvoke component="fonction_test" method="ftp" action="open" serveur="#form.serveur#"
login="#form.login#" mot_de_passe="#form.password#" connection="serveur">


<cfinvoke component="fonction_test" method="ftp"
action="existsdir" connection="serveur" directory="edengo_v3/concours">

<cfinvoke component="fonction_test" method="ftp" action="close" connection="serveur">
0
nickadele Messages postés 1251 Date d'inscription mercredi 7 août 2002 Statut Modérateur Dernière intervention 10 avril 2013
7 déc. 2005 à 14:05
c'est une fonction que je n'ai jamais eu l'occasion d'utiliser, mais...
selon la logique, tu fais appel à un composant qui lui même fait des actions sur ftp, jusque là je crois que j'ai tout compris...
La question que je me pose, est-ce que la fonction cfftp ne doit pas être appelée sur une même page, c'est à dire est-ce que ta page appelante ne perd pas tout simplement la connection?
1 ouverture de la connection, 2 actions divers, 3 fermeture de la connection.

Une solution serait donc de passer en paramètre à ton cfc une structure (vecteur) de la liste des actions à faire...

<cfinvoke component="fonction_test" method="ftp" action="open,existsdir,close" serveur="#form.serveur#"
login="#form.login#" mot_de_passe="#form.password#" connection="serveur" directory="edengo_v3/concours">

ensuite dans ton cfc tu parcours la liste d'actions et selon l'action tu opères.

Nickadele
0
mandaillou Messages postés 53 Date d'inscription dimanche 26 novembre 2000 Statut Membre Dernière intervention 17 février 2006
8 déc. 2005 à 12:05
En fait, mon but est d'ouvrir la connection FTP, ensuite j'appelle une fonction qui détermine les actions à effectuer et appelle ma fonction FTP et ensuite je ferme la connection. Je ne peux pas passer toutes les opérations en paramètre d'un coup car elles sont conditionnées par le résultat d'opérations FTP. Je sais pas si j'ai été très clair

Sylvain
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_lfontaine Messages postés 203 Date d'inscription lundi 23 décembre 2002 Statut Membre Dernière intervention 11 mai 2006
8 déc. 2005 à 12:20
Salut et desole de ne pas avoir vu ca avant.

Es tu sur de la maniere dont tu utilises cfinvoke ?
Tes arguments action="existsdir" connection="serveur1" directory="edengo_v3/concours"
doivent etre passe par un tag cfinvokeargument (pas fait gaffe vu que j'utilise peu le cfinvoke pour les cfc)

J'ai ete un peu deraille par ton precedent probleme de conection, en fait je pense que c'est un probleme de syntaxe.

Laurent
0
cs_lfontaine Messages postés 203 Date d'inscription lundi 23 décembre 2002 Statut Membre Dernière intervention 11 mai 2006
8 déc. 2005 à 12:29
ooops desole je raconte n'importe quoi. Je vais aller me coucher moi.
bye
0
mandaillou Messages postés 53 Date d'inscription dimanche 26 novembre 2000 Statut Membre Dernière intervention 17 février 2006
8 déc. 2005 à 12:32
J'ai changé la syntaxe mais j'ai toujours le même problème, il semblerait qu'on perde la connexion en passant par la fonction.

Voici mon code : main.cfm

<cfinvoke component="fct" method="ftp">
<cfinvokeargument name="login" value="#login#">
<cfinvokeargument name="serveur" value="#serveur#">
<cfinvokeargument name="mot_de_passe" value="#password#">
<cfinvokeargument name="action" value="open">
<cfinvokeargument name="connection" value="serveur">
</cfinvoke>


<cfinvoke component="fct" method="ftp">
<cfinvokeargument name="action" value="close">
<cfinvokeargument name="connection" value="serveur">
</cfinvoke>

mon composant : fct.cfc

<cfcomponent>
<cffunction name="ftp" returntype="string">
<cfargument name="login" required="no">
<cfargument name="mot_de_passe" required="no">
<cfargument name="serveur" required="no">
<cfargument name="action" required="no">
<cfargument name="remotefile" required="no">
<cfargument name="localfile" required="no">
<cfargument name="directory" required="no">
<cfargument name="connection" required="no">

<cfswitch expression="#action#">

<cfcase value="open">
<cfftp action="open" server="#serveur#" username="#login#" password="#mot_de_passe#" connection="#connection#">
<cfif #cfftp.Succeeded#> connection open
</cfif>
</cfcase>

<cfcase value="close">
<cfftp action="close" connection="#connection#">
</cfcase>

</cfswitch>
</cffunction>
</cfcomponent>

Quand je le lance, ma connexion s'ouvre ("connection open " s'affiche") et ensuite j'ai un message d'erreur "The connection attribute you specified, serveur, is invalid or does not exist "
0
cs_lfontaine Messages postés 203 Date d'inscription lundi 23 décembre 2002 Statut Membre Dernière intervention 11 mai 2006
8 déc. 2005 à 12:40
Essayes de definir ta connexion dans une variable de session.

Laurent
0
nickadele Messages postés 1251 Date d'inscription mercredi 7 août 2002 Statut Modérateur Dernière intervention 10 avril 2013
8 déc. 2005 à 15:15
mandaillou,

logique ça confirme ce que je disait ci-dessus.

au sein d'une même page :
1. ouverture de la connection
2. opération divers
3. fermeture de la connection

Toi tu fais :
1. Appel pour ouvrir une connection.
1 bis ouverture de la connection.
2. Appel pour faire des opérations
2 bis opération divers
et là tu as certainement comme réponse : connection innexistante!!!

Logique où est ta connection?

Dans le 1 bis qui n'a pas renvoyé d'objet connection.

Même si Coldfusion est très souple, il faut quand même resté dans l'esprit objet.

Bàt

Nickadele
0
Rejoignez-nous