2015-10-01 20 views
15

Tôi đang cố tải lên tệp bằng giao thức SFTP bằng C# sử dụng thư viện SSH.NET. Dưới đây là mã tôi đang sử dụngKhông thể tải lên tệp SFTP bằng SSH.NET trong C# - Quyền bị từ chối

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(); 

Tôi có thể kết nối và filestream cũng không phải là NULL. Nhưng tôi đang nhận được PermissionDeniedException khi cố gắng tải lên tệp.

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) 

Có bất kỳ cài đặt nào tôi thiếu trong mã trên không. Bất kỳ sự giúp đỡ nào cũng được đánh giá cao.

Trả lời

19

Bạn cũng cần chỉ định đường dẫn đầy đủ để tải lên tệp.

Ví dụ:

client.UploadFile(fileStream, "/home/user/" + f.Name, null); 

Nếu không có con đường, máy chủ SFTP lẽ cố gắng để ghi các file vào một thư mục gốc hoặc thư mục khác mà bạn không có một ghi vào (vì thế Permission denied).

6

Bạn có thể làm điều này:

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(); 
    } 
} 
Các vấn đề liên quan