Voila je suis entrain de réaliser un petit progrmamme qui remplace filezilla pour des gens pas doué en informatique bref.
J'ai réalisé cette application en perl tk objet.
Voila je n'arrive pas a envoyé le fichier précédemment sélectionné je vosu met le code pour que vous puissiez m'aider je suis conscient qu'il y a beaucoup a regarder mais c'est important pour moi car c'est pour passer mon BTS mardi svp aidez moi merci d'avance
Donc le fichier Interface.pl
#!/usr/bin/perl
use strict;
use Tk;
use warnings;
use Tk::Photo;
use Tk::PNG;
use Transferts;
#Création de la fenêtre principale
my $fenetre = MainWindow->new();
#Définition de la taille min de la fenêtre
$fenetre->minsize('500','300');
#Définition du title de la fenêtre
$fenetre->title("Islo People");
#Création de la barre de menu
my $barre_menu = $fenetre->Frame(-relief => 'groove' , -borderwidth => 2);
#Création de la barre du menu général
my $menu_gen = $barre_menu->Menubutton(
-text => 'Menu' ,
-font => '{Garamond} 10',
-tearoff => 0 ,
-menuitems => [
[ 'command' => 'Quitter' ,
-font => '{Garamond} 10',
-command => \&Quitter
]
]
);
# Création d'un cadre
my $frame1 = $fenetre->Frame()->pack(-side => "bottom",-padx => 0, -pady => 0);
#Affichage du menu général à gauche
$menu_gen->pack(-side => 'left');
#Affichage de la barre de menu en haut de la fenêtre
$barre_menu->pack(-side => 'top', -anchor => 'n', -fill => 'x');
my $ObjImage = $fenetre->Photo( -format => "png", -file => "/home/seb/Desktop/Islo_people/logo.png" );
my $bouton2 = $fenetre -> Button (
-image => $ObjImage
)->pack();
#parcourir
$frame1 ->Button ( -text => 'Parcourir' ,
-command => \&Chemin
) ->pack () ;
sub new
{
my $t=new transferts;
$t->transfert(my $chemin);
}
# Envoyer
$frame1 ->Button (
-text => 'Envoyer' ,
-command =>sub{Transferts::Transfert()}
)
->pack();
#my $status_var =0;
#$frame1->ProgressBar(
# -borderwidth => 10,
# -relief => 'sunken',
# -width => 35,
# -length => 500,
# -padx => 0,
# -pady => 0,
# -variable => \$status_var,
# -colors => [0, 'green'],
# -resolution => 0,
# -blocks => 50,
# -anchor => 'w',
# -from =>'0',
# -to => '100'
# )->pack(
# -padx => 10,
# -pady => 10,
## -fill => 'both'
# );
# La boucle dans laquelle la variable de ProgressBar change
#for (my $lostime = 0 ; $lostime < 101 ; $lostime += 5)
#{
# sleep 1 ;
# $status_var=$lostime ;
# l'instruction suivante permet la prise en compte
# des changements de valeurs de $status_var dans Perl/Tk,
# ici le widget Progressbar
# $fenetre->update;
# }
# sleep 5;
#print "Fin de l'exemple update \n";
# $fenetre->destroy;
#Création de notre barre de statut à l'aide d'un Label
#my $barre_statut = $fenetre->Label(-relief => 'groove', -text => "Islo people", -font => '{Garamond} 10');
#On l'ajoute en bas de la fenêtre afin de lui donner l'effet barre de statut
#$barre_statut->pack( -side => 'bottom', -fill => 'both');
#Définition de la fonction de fermeture de l'application
sub Quitter
{
exit(0);
}
sub Chemin()
{
my $chemin = $fenetre -> getOpenFile ( -initialdir => '/home') ;
return $chemin;
}
MainLoop;
Le fichier Transferts.pm
#!/usr/bin/perl
use strict;
use warnings;
use Net::FTPSSL;
use Connexion;
package Transferts;
my $photo;
my $connexion;
my $conn;
sub new
{
#$_[0] etant le premier parametre lors de l'appel de la fonction
my $picture=$_[0];
$photo = $picture;
$conn = new ConnectionFTP();
$connexion = $conn -> ConnectionFTP();
}
sub Transfert()
{
my $verify;
my $ftps;
$conn = Connexion::ConnectionFTP();
$verify = VerifierExtension();
if($verify == "Connecté")
{
$ftps->put($_[0]);
}
else
{
print "Mauvaise extension\nAutorise : jpeg, raw\n";
}
}
sub VerifierExtension()
{
my $TonFichier = $_[0];
my $extension = "correct";
# Verification de l'extension
unless ( -e $TonFichier and $TonFichier =~ m{(?:jpe?g|raw)$} )
{
die($extension = "incorrect");
}
return $extension;
}
1;
le fichier Connexion.pm
#!/usr/bin/perl
use strict;
use warnings;
use Net::FTPSSL;
package Connexion;
# $file correspond au fichier de configuration du FTP
my $file = '/home/seb/workspace/Islo_People/Configuration';
my $user;
my $mdp;
my $server;
my $port;
# Constructeur
sub new
{
my @parametre = Recherche_parametre();
$user = $parametre[0];
$mdp = $parametre[1];
$server = $parametre[2];
$port = $parametre[3];
}
# Fonction qui parcours le fichier de configuration et qui les retournent
sub Recherche_parametre()
{
#Déclaration des variables
my $lignes;
my @config;
my @parametre;
#Ouverture du fichier de configuration
open(CONF, "<".$file);
# $lignes prend la valeur du fichier de configuration
while(defined($lignes = <CONF>))
{
#Séparation des attributs de $lignes
@config = split("=", $lignes);
if($config[0] == 'user')
{
# Si la première valeur du tableau config est égale
#à user alors $user prend la valeur de la deuxième valeur du tableau
$user=$config[1];
}
if($config[2] == 'mdp')
{
$mdp=$config[3];
}
if($config[4] == 'server')
{
$server=$config[5];
}
if($config[6] == 'port')
{
$port=$config[7];
}
#Construction du tableau parametre avec les valeurs nécessaires à la connection du FTP
@parametre=($user,$mdp,$server,$port);
}
#Fermeture du fichier
close(CONF);
#On retourne le tableau
return @parametre;
}
# Fonction Connection qui retourne la valeur de l'état de la connection au FTP
sub ConnectionFTP
{
# Initialisation de $etat à vrai
my $etat = "vrai";
#my $parametre = Recherche_parametre();
#$user = $parametre[0];
#$mdp = $parametre[1];
#$server = $parametre[2];
#Connection au FTP
my $ftps = Net::FTPSSL->new($server,
Port=> $port,
Debug => 1)
or $etat = "faux"; # Si la connection n'est pas effectué $etat prend la valeur faux
$ftps-> login('$user', '$mdp')
or $etat = "faux"; # Si la connection n'est pas effectué $etat prend la valeur faux
# On retourne $etat
return $etat;
}
# Fonction Connection au FTP
sub VerifierConnection
{
my $connexion = ConnectionFTP();
if($connexion == 'vrai')
{
$connexion = "Connecté";
}
else
{
$connexion = "Non Connecté";
}
return $connexion;
}
1;
et le fichier de configuration
user=photographe mdp=passe server=10.0.2.69 port=21
Voila donc je t'explique le problème il s'avère que comme tu peut le voir je tente de mettre un fichier sur un ftp.
Hélas l'envoi ne fonctionne pas et je ne comprend pas pourquoi ca me met une erreur a la ligne
$ftps-> login('$user', '$mdp')
de Connexion.pm
Et voici l'erreur
<<+ 555 Host undefined
Tk::Error: Can't call method "login" on an undefined value at /home/seb/workspace/Islo_People/Connexion.pm line 86.
Tk callback for .frame1.button1
Tk::__ANON__ at /usr/lib/perl5/Tk.pm line 250
Tk::Button::butUp at /usr/lib/perl5/Tk/Button.pm line 175
<ButtonRelease-1>
(command bound to event)
Donc voila je sais que c'est un peu lourd a regardez mais tu ma demandé de bien situé le problème voila qu'y est fait je pense
Aide moi stp je suis vraiment bloqué stp
merci d'avance
