transfert de fichiers via SFTP
Je veux transférer un fichier via SFTP. J'ai trouvé une semblable question qui vous est posée de comment faire pour transférer des fichiers via SFTP en java?. J'ai essayé la solution proposée par la poste sur localhost. mais j'obtiens l'erreur suivante s'affiche sous la sortie.
sortie
preparing the host information for sftp.
Host connected.
sftp channel opened and connected.
2: No such file
at com.jcraft.jsch.ChannelSftp.throwStatusError(ChannelSftp.java:2846)
at com.jcraft.jsch.ChannelSftp._realpath(ChannelSftp.java:2340)
at com.jcraft.jsch.ChannelSftp.cd(ChannelSftp.java:342)
at ScpTo.main(ScpTo.java:69)
File transfered successfully to host.
sftp Channel exited.
Channel disconnected.
Host Session disconnected.
Code
import java.io.File;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.SftpException;
public class ScpTo {
/**
*
*/
public ScpTo() {
//TODO Auto-generated constructor stub
}
/**
* @param args
*/
public static void main(String[] args) {
String SFTPHOST = "192.168.1.3";
int SFTPPORT = 22;
String SFTPUSER = "sam-PC";
String SFTPPASS = "";
String SFTPWORKINGDIR = "C:/Users/sam/Desktop/hi.txt";
Session session = null;
Channel channel = null;
ChannelSftp channelSftp = null;
System.out.println("preparing the host information for sftp.");
JSch jsch = new JSch();
try {
session = jsch.getSession(SFTPUSER, SFTPHOST, SFTPPORT);
} catch (JSchException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
session.setPassword(SFTPPASS);
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
try {
session.connect();
} catch (JSchException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("Host connected.");
try {
channel = session.openChannel("sftp");
} catch (JSchException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
try {
channel.connect();
} catch (JSchException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("sftp channel opened and connected.");
channelSftp = (ChannelSftp) channel;
try {
channelSftp.cd(SFTPWORKINGDIR);
} catch (SftpException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
File f = new File(SFTPWORKINGDIR);
try {
channelSftp.put(new FileInputStream(f), f.getName());
} catch (FileNotFoundException e) {
//TODO Auto-generated catch block
e.printStackTrace();
} catch (SftpException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("File transfered successfully to host.");
channelSftp.exit();
System.out.println("sftp Channel exited.");
channel.disconnect();
System.out.println("Channel disconnected.");
session.disconnect();
System.out.println("Host Session disconnected.");
}
}
- Commencez avec pas attraper toutes les exceptions à la fois. Savoir ce que vous êtes en train de faire, de limiter le problème vous-même avant de demander de l'aide.
- post mis à jour. Il semblerait que c'est le problème avec la session.connect();
- Avez-vous commencé le serveur? Essayez d'exécuter
netstat -ano
et vérifier si il y a un processus d'écoute sur le port 22. - Je vais l'essayer. merci pour les conseils
- Essayez d'atteindre localhost:22 abord avec tout autre client, comme FireFox + FireFTP.
- avez-vous sftp en cours d'exécution sur un pc?
- Vous avez complètement changé votre question. Vous ne pouvez pas le faire sur ce site. Vous devriez demander à nouveau la question à la place. Personne ne remarquera votre nouvelle question autrement. Et c'est mauvais pour le site.
- désolé, je ne savais pas à ce sujet et n'y reviendra pas
Vous devez vous connecter pour publier un commentaire.
Le stack-trace montre que l'erreur s'est produite lors de l'exécution de la commande cd. L'erreur "no such file", ce qui, probablement, signifie en fait "aucun répertoire de ce type", de sorte que le problème est presque certainement que le répertoire défini par SFTPWORKINGDIR n'existe pas.
Je ne vous blâme pas pour se confondre, cependant. L'API semble être hellishly compliqué. Je suis l'un des développeurs de edtFTPj/PRO, qui offre beaucoup plus simple de l'interface. Pour exemple, voici un code pour télécharger un fichier de plus de SFTP:
Noter que edtFTPj/PRO n'est pas un produit gratuit.
Pour commencer,
SFTPWORKINGDIR
semble faire référence à un fichier, pas un répertoire. Vous pouvez essayer decd
à quelque chose d'un fichier, ou qui est censé être un fichier.Deuxième, SFTP utilise un unix-comme modèle pour les noms de chemins. Les chemins qui commencent par "/" sont des chemins absolus et sont résolus à partir du répertoire racine du serveur. Les chemins qui ne commencent pas par "/" sont des chemins relatifs, et sont résolus à partir du répertoire où se trouve votre SFTP session a commencé (généralement le répertoire de base pour le compte auquel vous vous êtes connecté sur le serveur).
Votre valeur de
SFTPWORKINGDIR
est un windows-format de chemin, pas un unix-format du chemin d'accès. Il est très probable que le serveur SFTP n'est pas de l'interpréter comme vous le souhaitez, même si le serveur SFTP est en cours d'exécution sur un système Windows. Vous devriez consulter la documentation de votre serveur SFTP et de convertir le chemin d'accès dans la forme correcte pour accéder à l'annuaire que vous voulez. Si le serveur SFTP est Cygwin serveur openssh, je crois que le formulaire de droite sera quelque chose comme "/cygdrive/c/Utilisateurs/sam/Desktop".Ici est un 'code de téléchargement' avec l'authentification à partir d'une machine windows à linux de la machine. ce code d'upload de fichier à partir de l'emplacement spécifique de votre machine(win) et l'envoie au serveur FTP. C'est ma solution que j'ai appliqué à mon problème. si quelqu'un voit le problème, s'il vous plaît commentaire.