J'essaie de télécharger un fichier Excel à l'aide de la machine SFTP vers Linux à partir de My Windows PC local.
Voici mon code:
private void uploadToSftp() {
try
{
ChannelSftp sftpClient = null;
Channel channel = null;
JSch jsch = new JSch();
Session session = jsch.getSession("username", "Host", 22);
session.setPassword("password");
Properties config = new Properties();
config.put("StrictHostKeyChecking","no");
session.setConfig(config);
session.connect();
channel = session.openChannel("sftp");
channel.connect();
sftpClient = (ChannelSftp) channel;
sftpClient.cd("/var/www/folder");
File localFile = new File("C:\\Workspace\\upload-file\\test.xlsx");
sftpClient.put(localFile.getAbsolutePath(),localFile.getName());
sftpClient.disconnect();
channel.disconnect();
session.disconnect();
} catch (JSchException e) {
e.printStackTrace();
} catch (SftpException e) {
e.printStackTrace();
}
}
mais chaque fois que j'exécute cette application, j'ai une erreur:
3: Permission denied
at com.jcraft.jsch.ChannelSftp.throwStatusError(ChannelSftp.Java:2873)
at com.jcraft.jsch.ChannelSftp._put(ChannelSftp.Java:594)
at com.jcraft.jsch.ChannelSftp.put(ChannelSftp.Java:475)
at com.jcraft.jsch.ChannelSftp.put(ChannelSftp.Java:365)
Quelqu'un peut-il savoir ce qui pourrait être un problème et comment puis-je résoudre ce problème?
Vous semblez télécharger votre fichier local "c:\workspace\upload-file\test.xlsx" sur répertoire distant, "/ var/www/dossier" = sur sftp.
Je suppose que vous avez toutes les autorisations pour R EADING, w RIVER, E xecuting, etc. sur votre fichier local ( "c:\workspace\upload-file\test.xlsx"), mais votre dossier distant, "/ var/www/dossier", pourrait ne pas accepter votre Accès de l'application, y compris l'action "Télécharger".
Solution:
Le moyen le plus simple de résoudre ce problème vient d'accorder à toutes les utilisateurs de faire quoi que ce soit dans votre répertoire cible de téléchargement ( VAR/www/dossier "). Veuillez essayer ces commandes Linux pour vérifier la permission de votre dossier de téléchargement.
ls -ld /var/www/folder
Si vous voyez votre /var/www/dossier / Le répertoire n'est pas autorisé w Riting ou r EADING (ex: DRWXR-XR-X) Pour les utilisateurs normaux, veuillez accorder des autorisations pour ce dossier avec la commande Follwing.
chmod 777 /var/www/folder
//check permission again.
ls -ld /var/www/folder
Si vous pouvez vérifier que la permission du dossier cible est suffisante ( drwxrwxrwx), veuillez exécuter votre application à nouveau.
NOTE : Donner toutes les autorisations pour d'autres utilisateurs n'est pas considérée comme une bonne pratique. Veuillez faire cette solution pour tester et modifier le paramètre de permission adapté à votre spécification ultérieurement. Pour plus de détails, Veuillez cocher ce lien (cliquez sur).