2008-09-17 30 views
61

Khả năng này có đi kèm với .Net không? Nếu không, thư viện miễn phí tốt nhất là gì? Tôi cần một cái gì đó mà sẽ ném ngoại lệ tốt khi có một vấn đề, và cho phép tôi theo dõi sự tiến bộ của nó.Làm cách nào để tải tệp lên máy chủ SFTP trong C#/.NET?

+0

cũng xem các câu hỏi [Thư viện SFTP cho .NET] (http://stackoverflow.com/questions/530330/sftp-libraries-for-net) và [mô-đun FTP/SFTP cho .NET] (http: // stackoverflow.com/questions/2731967/ftp-sftp-module-for-net) –

+0

Một lựa chọn khác là Renci SSH.NET. – CodesInChaos

Trả lời

22

Edit: câu trả lời này là từ lâu lắm rồi và không còn giá trị. Xem nhận xét

Bạn có thể muốn xem qua SharpSSH. Nó hỗ trợ SFTP ra khỏi hộp và đó là OpenSource.

+5

SharpSSH dường như được dựa trên các thư viện Java (JSch và JCE) và duyệt mã nguồn mở rộng đã không làm cho tôi tự tin rằng thư viện này có thể được sử dụng trong môi trường sản xuất. Một thử nghiệm căng thẳng nhỏ dẫn đến ngoại lệ bất ngờ. –

+1

Thật không may SharpSSH không được hỗ trợ và không ổn định cho sản xuất. Một cái gì đó thương mại như SFTPBlackbox của chúng tôi (http://www.sftp-net.com/) sẽ hoạt động tốt hơn. –

+0

Tôi đồng ý, trông khá kém chất lượng đối với tôi. Tôi không thích điều java port "tại chỗ" mà anh ta đang thực hiện ở đây. – Jeff

2

Không có giải pháp cho điều này trong khuôn khổ .net.

http://www.eldos.com/sbb/sftpcompare.php phác thảo một danh sách các tùy chọn không có miễn phí.

đặt cược miễn phí tốt nhất của bạn là mở rộng SSH bằng Granados. http://www.routrek.co.jp/en/product/varaterm/granados.html

+2

Nó không giống như Granados có thể được sử dụng trong môi trường sản xuất: nó đã lỗi thời và dường như không được hỗ trợ. –

0

Thật không may, nó không nằm trong .NET Framework. Mong muốn của tôi là bạn có thể tích hợp với FileZilla, nhưng tôi không nghĩ rằng nó cho thấy một giao diện. Họ có kịch bản tôi nghĩ, nhưng nó sẽ không rõ ràng như vậy.

Tôi đã sử dụng CuteFTP trong một dự án có SFTP. Nó cho thấy một thành phần COM mà tôi đã tạo ra một trình bao bọc .NET. Việc nắm bắt, bạn sẽ tìm thấy, là quyền. Nó chạy đẹp dưới các thông tin đăng nhập Windows cài đặt CuteFTP, nhưng chạy dưới các ủy nhiệm khác yêu cầu quyền được đặt trong DCOM.

30

Có thể bạn có thể viết/kiểm soát winscp?

Cập nhật: WinSCP hiện có a .NET library sẵn như là một nuget package hỗ trợ SFTP, SCP, và FTPS

+3

Điểm tốt. Tôi tìm thấy hướng dẫn để thực hiện chính xác điều đó: http://winscp.net/eng/docs/guide_dotnet – Raithlin

+9

[phiên bản mới nhất] (http://winscp.net/eng/docs/library) giờ đây thậm chí có hỗ trợ .NET gốc. ! – fretje

+0

Sự cố khi tải lên thư mục từ xa không phải gốc. Tài liệu nói rằng bạn phải sử dụng đường dẫn tuyệt đối của máy chủ ("d: \ ftproot \ etc"), điều đó thật lố bịch trong quan điểm của tôi. Ngay cả khi được trang bị kiến ​​thức đó, tôi cũng không bao giờ có thể lấy được tập tin mà tôi muốn nó đi. –

0

Để có tùy chọn không miễn phí khác, hãy thử edtFTPnet/PRO. Nó có hỗ trợ toàn diện cho SFTP, và cũng hỗ trợ FTPS (và dĩ nhiên là FTP) nếu được yêu cầu.

6

Mã sau cho biết cách tải tệp lên máy chủ SFTP bằng cách sử dụng thành phần Rebex SFTP của chúng tôi.

// create client, connect and log in 
Sftp client = new Sftp(); 
client.Connect(hostname); 
client.Login(username, password); 

// upload the 'test.zip' file to the current directory at the server 
client.PutFile(@"c:\data\test.zip", "test.zip"); 

client.Disconnect(); 

Bạn có thể ghi nhật ký giao tiếp đầy đủ vào tệp bằng cách sử dụng thuộc tính LogWriter như sau. Ví dụ đầu ra (từ thành phần FTP nhưng đầu ra SFTP tương tự) có thể được tìm thấy here.

client.LogWriter = new Rebex.FileLogWriter(
    @"c:\temp\log.txt", Rebex.LogLevel.Debug); 

hoặc chặn các giao tiếp sử dụng các sự kiện như sau:

Sftp client = new Sftp(); 
client.CommandSent += new SftpCommandSentEventHandler(client_CommandSent); 
client.ResponseRead += new SftpResponseReadEventHandler(client_ResponseRead); 
client.Connect("sftp.example.org"); 

//... 
private void client_CommandSent(object sender, SftpCommandSentEventArgs e) 
{ 
    Console.WriteLine("Command: {0}", e.Command); 
} 

private void client_ResponseRead(object sender, SftpResponseReadEventArgs e) 
{ 
    Console.WriteLine("Response: {0}", e.Response); 
} 

Để biết thêm thông thấy tutorial hoặc download một thử nghiệm và kiểm tra samples.

+1

Thử nghiệm giới hạn của tôi về các máy khách .NET SFTP khác nhau cho thấy rằng sản phẩm thương mại này là lựa chọn tốt. –

+2

Tôi đã sử dụng công cụ RebEx trước khi cũng cần sử dụng nó cho gói SSIS. Họ có hỗ trợ tốt và tài liệu hướng dẫn nếu bạn đang tìm kiếm để đi qua một tuyến đường thương mại bên thứ 3. –

Các vấn đề liên quan