c#連線SFTP上傳檔案
名詞解釋(百度百科)
sftp是Secure File Transfer Protocol的縮寫,安全檔案傳送協議。可以為傳輸檔案提供一種安全的加密方法。sftp 與 ftp 有著幾乎一樣的語法和功能。SFTP 為 SSH的一部份,是一種傳輸檔案至 Blogger 伺服器的安全方式。其實在SSH軟體包中,已經包含了一個叫作SFTP(Secure File Transfer Protocol)的安全檔案傳輸子系統,SFTP本身沒有單獨的守護程式,它必須使用sshd守護程式(埠號預設是22)來完成相應的連線操作,所以從某種意義上來說,SFTP並不像一個伺服器程式,而更像是一個客戶端程式。SFTP同樣是使用加密傳輸認證資訊和傳輸的資料,所以,使用SFTP是非常安全的。但是,由於這種傳輸方式使用了加密/解密技術,所以傳輸效率比普通的FTP要低得多,如果您對網路安全性要求更高時,可以使用SFTP代替FTP。
程式碼實現:
1.新增引用 Renci.SshNet(通過Nuget下載)
https://www.nuget.org/packages/SSH.NET/2013.4.7
2.核心程式碼
const int port = 22; //埠 const string host = " "; //sftp地址 const string username = " "; //使用者名稱 const string password = " ";//密碼 const string workingdirectory = "/";//讀取、上傳檔案的目錄 "/"為根目錄 const string uploadfile = @"c:1.xml"; //上傳檔案地址 using (var client = new SftpClient(host, port, username, password)) //建立連線物件 { client.Connect(); //連線 client.ChangeDirectory(workingdirectory); //切換目錄 var listDirectory = client.ListDirectory(workingdirectory); //獲取目錄下所有檔案 foreach (var fi in listDirectory) //遍歷檔案 { Console.WriteLine(" - " + fi.Name); // client.DeleteFile(fi.FullName);//刪除檔案 } using (var fileStream = new FileStream(uploadfile, FileMode.Open)) { client.BufferSize = 4 * 1024; // bypass Payload error large client.UploadFile(fileStream, Path.GetFileName(uploadfile)); //上傳檔案 //UploadFile方法沒有返回值,無法判斷檔案是否上傳成功,我想到的解決辦法是,上傳後再獲取一下檔案列表,如果檔案列表count比上傳之前大,說明上傳成功。當然 //這樣的前提是隻有你一個人上傳。不知各位大神有沒有其它辦法 } Console.ReadKey();
完整示例:
/* get SSH.NET (BSD License: http://sshnet.codeplex.com/license) with NuGet: >Install-Package SSH.NET -Version 2013.4.7 or just get the dll from here: http://j.mp/sshNet */ using System; using System.Collections.Generic; using Renci.SshNet; /* reference needed: Renci.SshNet.dll */ class Program { static void Main(string[] args){ // Setup Credentials and Server Information ConnectionInfo ConnNfo = new ConnectionInfo("hostOrIP",22,"username", new AuthenticationMethod[]{ // Pasword based Authentication new PasswordAuthenticationMethod("username","password"), // Key Based Authentication (using keys in OpenSSH Format) new PrivateKeyAuthenticationMethod("username",new PrivateKeyFile[]{ new PrivateKeyFile(@"..openssh.key","passphrase") }), } ); // Execute a (SHELL) Command - prepare upload directory using (var sshclient = new SshClient(ConnNfo)){ sshclient.Connect(); using(var cmd = sshclient.CreateCommand("mkdir -p /tmp/uploadtest && chmod +rw /tmp/uploadtest")){ cmd.Execute(); Console.WriteLine("Command>" + cmd.CommandText); Console.WriteLine("Return Value = {0}", cmd.ExitStatus); } sshclient.Disconnect(); } // Upload A File using (var sftp = new SftpClient(ConnNfo)){ string uploadfn = "Renci.SshNet.dll"; sftp.Connect(); sftp.ChangeDirectory("/tmp/uploadtest"); using (var uplfileStream = System.IO.File.OpenRead(uploadfn)){ sftp.UploadFile(uplfileStream, uploadfn, true); } sftp.Disconnect(); } // Execute (SHELL) Commands using (var sshclient = new SshClient(ConnNfo)){ sshclient.Connect(); // quick way to use ist, but not best practice - SshCommand is not Disposed, ExitStatus not checked... Console.WriteLine(sshclient.CreateCommand("cd /tmp && ls -lah").Execute()); Console.WriteLine(sshclient.CreateCommand("pwd").Execute()); Console.WriteLine(sshclient.CreateCommand("cd /tmp/uploadtest && ls -lah").Execute()); sshclient.Disconnect(); } Console.ReadKey(); } }
相關文章
- sftp 傳輸檔案FTP
- jftp通過sftp協議上傳檔案FTP協議
- xshell 使用 sftp上傳下載檔案FTP
- java實現sftp檔案的上傳下載JavaFTP
- 使用SecureCRT的SFTP將檔案上傳到Liunx系統上SecurecrtFTP
- c# 上傳FTP檔案C#FTP
- C# httpclient上傳檔案C#HTTPclient
- sftp 上傳類FTP
- php檔案上傳之多檔案上傳PHP
- 單個檔案上傳和批量檔案上傳
- 檔案上傳
- JSP使用FileUpload上傳檔案設定setSizeMax後連線被重置JS
- SpringMVC 單檔案上傳與多檔案上傳SpringMVC
- Java SFTP 上傳、下載等操作JavaFTP
- linux sftp遠端連線命令LinuxFTP
- 將.Net Core釋出至Docker,並連線 Redis、上傳檔案到本機、連線sqlserver資料庫DockerRedisSQLServer資料庫
- Java大檔案上傳、分片上傳、多檔案上傳、斷點續傳、上傳檔案minio、分片上傳minio等解決方案Java斷點
- 檔案上傳之三基於flash的檔案上傳
- 前端大檔案上傳/分片上傳前端
- 教你如何實現c#檔案上傳下載功能C#
- C#上傳檔案圖片怎麼判斷格式C#
- C# FTP上傳檔案至伺服器程式碼C#FTP伺服器
- 如何在shell指令碼里使用sftp批次傳送檔案指令碼FTP
- 在java中使用SFTP協議安全的傳輸檔案JavaFTP協議
- C# Socket 檔案傳送傳輸C#
- Flask——檔案上傳Flask
- PHP上傳檔案PHP
- JavaScript 檔案上傳JavaScript
- Git上傳檔案Git
- YII檔案上傳
- 檔案上傳概述
- beego上傳檔案Go
- 上傳檔案流程
- 上傳EXCLE檔案
- PHP 檔案上傳PHP
- 檔案上傳漏洞
- ubuntu20.04怎麼使用藍芽連線手機互傳檔案?ubuntu連線藍芽手機傳檔案的技巧Ubuntu藍芽
- MVC檔案上傳 - 使用Request.Files上傳多個檔案MVC