Не удалось загрузить файл SFTP с помощью SSH.NET в С# - Отказано в доступе
Я пытаюсь загрузить файл, используя SFTP-протокол, используя С#, используя библиотеку SSH.NET. Ниже приведен код, который я использую
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();
Я могу подключиться, а filestream
также не является NULL. Но я получаю PermissionDeniedException
при попытке загрузить файл.
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)
Есть ли какие-либо настройки, отсутствующие в приведенном выше коде. Любая помощь очень ценится.
Ответы
Ответ 1
Вам необходимо указать полный путь для загрузки файла.
Например:
client.UploadFile(fileStream, "/home/user/" + f.Name, null);
Без пути SFTP-сервер, вероятно, пытается записать файл в корневую папку или другую папку, к которой у вас нет прав на запись (следовательно, в доступе отказано).
Ответ 2
Вы можете сделать это:
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();
}
}
Ответ 3
Я получил эту ошибку, потому что я использовал Path.Combine()
для моего аргумента UploadFile, например:
client.UploadFile(fileStream, Path.Combine("/home/user", f.Name), null);
Я думаю, что это делает косые черты неправильно. Так что просто выполните обычную конкатенацию строк, как ответ выше:
client.UploadFile(fileStream, "/home/user/" + f.Name, null);