Connexion en sftp depuis une application swing

Fermé
skyzerGen Messages postés 3 Date d'inscription mercredi 23 avril 2014 Statut Membre Dernière intervention 4 mai 2014 - 3 mai 2014 à 19:19
skyzerGen Messages postés 3 Date d'inscription mercredi 23 avril 2014 Statut Membre Dernière intervention 4 mai 2014 - 4 mai 2014 à 16:41
Bonjour,

Je fais une application java en swing, mon projet qui est aujourd'hui presque terminé.

Presque car lorsque je créé un jar de mon projet et que je l'exécute un bogue survient lors de l'envoi d'une image sur un serveur debian en sftp.

Le problème ne survenait pas lorsque je le lançait avec le bouton "run" de eclipse, mais uniquement depuis le .jar, une fois que j'ai choisi un image avec une classe étendue de JFileChooser (que j'ai nommé ImageChooser), j'instancie ma classe Sftp qui utilise la librairie JSch et c'est la que le problème survient, le traitement s'arrête à ce point-ci.

Voici ma classe Sftp :

public class Sftp {

// Paramètres de connexion
private String login;
private String server;
private int port;
private String password;
private String remoteDirectory;
private File file;

// Variables de la lib JSch
private JSch jsch;
private Session session;
private Channel channel;
private ChannelSftp channelSftp;

// Constructeur par défaut
public Sftp() {

this.login = "root";
this.server = "192.168.1.21";
this.port = 22;
this.password = "root";
this.remoteDirectory = "/var/www/IdoLogis/photos";

this.jsch = new JSch();
this.session = null;
this.channel = null;
this.channelSftp = null;

}

// Construteur pour nouvelle connection
public Sftp (String login, String server, int port, String password, String remoteDirectory) {

this.login = login;
this.server = server;
this.port = port;
this.password = password;
this.remoteDirectory = remoteDirectory;

this.jsch = new JSch();
this.session = null;
this.channel = null;
this.channelSftp = null;

}

public boolean connexion() {

// Reste vrai tant que la connexion de rencontre pas d'erreur
boolean coOK = true;

try {

// Création de la session
session = jsch.getSession(login, server, port);
session.setPassword(password.getBytes(Charset.forName("ISO-8859-1")));

// Création de la config de la session
Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);

// Variables proxy
//Proxy proxy = new ProxyHTTP();
//proxy = createProxyHTTP(proxyHost, proxyPort);
//Proxy proxy = new ProxySOCKS4();
//Proxy proxy = new ProxySOCKS5();
//proxy = createProxySOCKS5(proxyHost, proxyPort);
//session.setProxy(proxy);

// Ou methode proxy
/* final String proxyHost = builder.getProxyHost(fileSystemOptions);
if (proxyHost != null)
{
final int proxyPort = builder.getProxyPort(fileSystemOptions);
final SftpFileSystemConfigBuilder.ProxyType proxyType = builder.getProxyType(fileSystemOptions);
Proxy proxy = null;
if (SftpFileSystemConfigBuilder.PROXY_HTTP.equals(proxyType))
{
proxy = createProxyHTTP(proxyHost, proxyPort);
}
else if (SftpFileSystemConfigBuilder.PROXY_SOCKS5.equals(proxyType))
{
proxy = createProxySOCKS5(proxyHost, proxyPort);
}
else if (SftpFileSystemConfigBuilder.PROXY_STREAM.equals(proxyType))
{
proxy = createStreamProxy(proxyHost, proxyPort, fileSystemOptions, builder);
}

if (proxy != null)
{
session.setProxy(proxy);
}
}*/

// Connexion à la session
session.connect();

// Ouverture et connexion au channel
channel = session.openChannel("sftp");
channel.connect();
channelSftp = (ChannelSftp) channel;

return coOK;

}
catch (JSchException e) {

coOK = false;
e.printStackTrace();
return coOK;
}

}

public boolean sendFile(File file) {

this.file = file;

// Reste vrai tant que l'envoi de rencontre pas d'erreur
boolean sendingOK = true;

// Chagement du répertoir déstinataire
try {
channelSftp.cd(remoteDirectory);
} catch (SftpException e) {
sendingOK = false;
e.printStackTrace();
}

// Envoi du fichier
try {
channelSftp.put(new FileInputStream(this.file), this.file.getName());
} catch (FileNotFoundException | SftpException e) {
sendingOK = false;
e.printStackTrace();
}

return sendingOK;
}

public boolean deleteFile(String file) {

// Reste vrai tant que la suppression de rencontre pas d'erreur
boolean sendingOK = true;

// Chagement du répertoir déstinataire
try {
channelSftp.cd(remoteDirectory);
} catch (SftpException e) {
sendingOK = false;
e.printStackTrace();
}

// suppression du fichier
try {
channelSftp.rm(file);
} catch (SftpException e) {
sendingOK = false;
e.printStackTrace();
}

return sendingOK;
}

public void deconnexion() {

if(session != null)
session.disconnect();

if(channel != null)
channel.disconnect();

if(channelSftp != null)
channelSftp.quit();
}

}

Et ici l'a classe d'envoi du fichier :

    class BoutonPhotoListener implements ActionListener{
public void actionPerformed(ActionEvent e) {

ImageChooser chooser = new ImageChooser();
if (chooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {

boolean sendingOK;
String filename = chooser.getSelectedFile().getName();

File file;
file = chooser.getSelectedFile();
ImageIcon image = new ImageIcon(file.getAbsolutePath());

if(image.getIconHeight() <= 1000 && image.getIconWidth() <= 1000) {

//
JOptionPane.showMessageDialog(null , "Début du sftp", "Résultat", JOptionPane.INFORMATION_MESSAGE);
Sftp sftp = new Sftp();
//
JOptionPane.showMessageDialog(null , "connexion au sftp", "Résultat", JOptionPane.INFORMATION_MESSAGE);
sftp.connexion();
//
JOptionPane.showMessageDialog(null , "Envoi du fichier", "Résultat", JOptionPane.INFORMATION_MESSAGE);
sendingOK = sftp.sendFile(file);

if(sendingOK == true) {

JOptionPane.showMessageDialog(null , "La photo a bien été envoyée vers le serveur.", "Résultat", JOptionPane.INFORMATION_MESSAGE);
bien.setPhoto(filename);

}
else {

JOptionPane.showMessageDialog(null , "La photo n'a pas pu être envoyée sur le serveur", "Résultat", JOptionPane.ERROR_MESSAGE);

}

sftp.deconnexion();
}
else {
JOptionPane.showMessageDialog(null , "La photo est trop grande. Veuillez télécharger une photo de 1000x1000 pixels.", "Résultat", JOptionPane.ERROR_MESSAGE);
}
}

}
}

J'ai bien le message "Début du sftp" mais je n'ai pas "connexion au sftp", le traitement s'arrête donc lors que à la ligne :
Sftp sftp = new Sftp();

Je doit rendre ce projet pour lundi et il n'y as plus que ce dernier problème qui m'embête depuis hier, je suis sur que c'est encore une érreur à la con comme d'habitude XD mais la je n'ai aucune piste ... :(

Si quelqu'un aurait une idée sur le problème, je le remercie d'avance ;)


A voir également:

2 réponses

arth Messages postés 9374 Date d'inscription mardi 27 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2016 1 291
4 mai 2014 à 09:57
Il faudrait mettre des System.out.println() dans la classe SFTP pour savoir où ça s'arrête réellement.
0
skyzerGen Messages postés 3 Date d'inscription mercredi 23 avril 2014 Statut Membre Dernière intervention 4 mai 2014
4 mai 2014 à 16:41
Bonjour,
J'ai essayé de mettre des JOptionPane avant chaque ligne de mes deux script et le traitement s'arrête bien à la ligne :

Sftp sftp = new Sftp();

Le constructeur de Sftp n'est même pas lancé.
0