J'essaie de télécharger un fichier en utilisant le protocole SFTP en utilisant C # en utilisant la bibliothèque SSH.NET. Voici le code que j'utilise
FileInfo f=new FileInfo("C:\\mdu\\abcd.xml");
string uploadfile=f.FullName;
Console.WriteLine(f.Name);
Console.WriteLine("uploadfile"+uploadfile);
var client = new SftpClient(Host, port, username, password);
client.Connect();
if(client.IsConnected){
Console.WriteLine("I AM CONNECTED");
}
var fileStream = new FileStream(uploadfile, FileMode.Open);
if(fileStream!=null){
Console.WriteLine("YOU ARE NOT NULL");
}
client.BufferSize = 4 * 1024;
client.UploadFile(fileStream, f.Name,null);
client.Disconnect();
client.Dispose();
Je peux me connecter et le filestream
n'est pas non plus NULL. Mais j'obtiens PermissionDeniedException
en essayant de télécharger un fichier.
Unhandled Exception: Renci.SshNet.Common.SftpPermissionDeniedException: Permission denied
at Renci.SshNet.Sftp.SftpSession.RequestOpen(String path, Flags flags, Boolean nullOnError)
at Renci.SshNet.SftpClient.InternalUploadFile(Stream input, String path, Flags flags, SftpUploadAsyncResult asyncResult, Action`1 uploadCallback)
at Renci.SshNet.SftpClient.UploadFile(Stream input, String path, Boolean canOverride, Action`1 uploadCallback)
at Renci.SshNet.SftpClient.UploadFile(Stream input, String path, Action`1 uploadCallback)
at movemsi.Program.UploadFile()
at movemsi.Program.Main(String[] args)
Y a-t-il des paramètres qui me manquent dans le code ci-dessus. Toute aide est très appréciée.
Vous devez spécifier un chemin d'accès complet vers lequel télécharger le fichier.
Par exemple:
client.UploadFile(fileStream, "/home/user/" + f.Name, null);
Sans le chemin, le serveur SFTP essaie probablement d'écrire le fichier dans un dossier racine ou un autre dossier auquel vous n'avez pas accès en écriture (d'où le Autorisation refusée).
Tu peux le faire:
FileInfo f = new FileInfo("C:\\mdu\\abcd.xml");
string uploadfile = f.FullName;
Console.WriteLine(f.Name);
Console.WriteLine("uploadfile" + uploadfile);
//Passing the sftp Host without the "sftp://"
var client = new SftpClient("ftp.example.com", port, username, password);
client.Connect();
if(client.IsConnected)
{
var fileStream = new FileStream(uploadfile, FileMode.Open);
if(fileStream != null)
{
//If you have a folder located at sftp://ftp.example.com/share
//then you can add this like:
client.UploadFile(fileStream, "/share/" + f.Name,null);
client.Disconnect();
client.Dispose();
}
}
J'obtenais cette erreur parce que j'utilisais Path.Combine()
pour mon argument UploadFile, comme ceci:
client.UploadFile(fileStream, Path.Combine("/home/user", f.Name), null);
Je pense que cela rend les barres obliques dans le mauvais sens. Il suffit donc de faire une concaténation de chaîne normale comme la réponse ci-dessus:
client.UploadFile(fileStream, "/home/user/" + f.Name, null);