日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

C# SFTP上传文件

發布時間:2023/12/10 C# 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C# SFTP上传文件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?????????最近工作中用到一個SFTP上傳文件的功能,因為客戶端是C#做的就搜索了一些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。

?

C#代碼:

?????????用到了SharpSSH這個第三方動態庫,需要添加Tamir.SharpSSH.dll、Org.Mentalis.Security.dll、DiffieHellman.dll三個dll的引用。

?

using?System;

using?System.Collections.Generic;

using?System.Linq;

using?System.Text;

using?System.Collections;

using?Tamir.SharpSsh;

using?Tamir.SharpSsh.jsch;

?

namespace?Controller

{

????class?SFTPHelper

??? {

????????private?Session?m_session;

????????private?Channel?m_channel;

????????private?ChannelSftp?m_sftp;

?

????????//host:sftp地址?? user:用戶名?? pwd:密碼?????????

????????public?SFTPHelper(string?ip,?string?port,?string?user,?string?pwd)

??????? {

????????????Logger.info("SFTP ip:"?+ ip +?" port:"?+ port);

?

????????????int?serverport =?Int32.Parse(port);

?

????????????JSch?jsch =?new?JSch();

??????????? m_session = jsch.getSession(user, ip, serverport);

?

????????????MyUserInfo?ui =?new?MyUserInfo();

??????????? ui.setPassword(pwd);

??????????? m_session.setUserInfo(ui);

??????? }

?

????????//SFTP連接狀態?????????

????????public?bool?Connected {?get?{?return?m_session.isConnected(); } }

?

????????//連接SFTP?????????

????????public?bool?Connect()

??????? {

????????????try

??????????? {

????????????????if?(!Connected)

??????????????? {

??????????????????? m_session.connect();

?????? ?????????????m_channel = m_session.openChannel("sftp");

??????????????????? m_channel.connect();

??????????????????? m_sftp = (ChannelSftp)m_channel;

??????????????? }

????????????????return?true;

??????????? }

????????????catch(Exception?ex)

??????????? {

????????????????Logger.error("SFTP連接異常!"?+ ex.ToString());

????????????????return?false;

??????????? }

??????? }

?

????????//斷開SFTP?????????

????????public?void?Disconnect()

??????? {

????????????if?(Connected)

??????????? {

??????????????? m_channel.disconnect();

??????????????? m_session.disconnect();

??????????? }

??????? }

?

????????//SFTP存放文件?????????

????????public?bool?Put(string?localPath,?string?remotePath)

??????? {

????????????try

??????????? {

??????????????? Connect();

????????????????if?(this.Connected)

??????????????? {

??????????????????? Tamir.SharpSsh.java.String?src =?new?Tamir.SharpSsh.java.String(localPath);

??????????????????? Tamir.SharpSsh.java.String?dst =?new?Tamir.SharpSsh.java.String(remotePath);

??????????????????? m_sftp.put(src, dst);

????????????????????return?true;

??????????????? }

??????????? }

????????????catch?(Exception?ex)

??????????? {

????????????????Logger.error("SFTP上傳文件錯誤!"?+ ex.ToString());

????????????????return?false;

??????????? }

????????????return?false;

??????? }

?

????????//SFTP獲取文件?????????

????????public?bool?Get(string?remotePath,?string?localPath)

??????? {

????????????try

??????????? {

??????????????? Tamir.SharpSsh.java.String?src =?new?Tamir.SharpSsh.java.String(remotePath);

??????????????? Tamir.SharpSsh.java.String?dst =?new?Tamir.SharpSsh.java.String(localPath);

??????????????? m_sftp.get(src, dst);

????????????????return?true;

??????????? }

????????????catch

??????????? {

????????? ??????return?false;

??????????? }

??????? }

?

????????//刪除SFTP文件?

????????public?bool?Delete(string?remoteFile)

??????? {

????????????try

??????????? {

??????????????? m_sftp.rm(remoteFile);

????????????????return?true;

??????????? }

????????????catch

??????????? {

????????????????return?false;

??????????? }

??????? }

?

????????//獲取SFTP文件列表?????????

????????public?ArrayList?GetFileList(string?remotePath,?string?fileType)

??????? {

????????????try

??????????? {

??????????????? Tamir.SharpSsh.java.util.Vector?vvv = m_sftp.ls(remotePath);

????????????????ArrayList?objList =?new?ArrayList();

????????????????foreach?(Tamir.SharpSsh.jsch.ChannelSftp.LsEntry?qqq?in?vvv)

??????????????? {

????????????????????string?sss = qqq.getFilename();

????????????????????if?(sss.Length > (fileType.Length + 1) && fileType == sss.Substring(sss.Length - fileType.Length))

??????????????????? { objList.Add(sss); }

????????????????????else?{?continue; }

??????????????? }

?

????????????????return?objList;

??????????? }

????????????catch

??????????? {

????????????????return?null;

??????????? }

??????? }

?

??? }

?

????//登錄驗證信息?????????

????public?class?MyUserInfo?:?UserInfo

??? {

????????String?passwd;

?

????????public?String?getPassword() {?return?passwd; }

????????public?void?setPassword(String?passwd) {?this.passwd = passwd; }

?

????????public?String?getPassphrase() {?return?null; }

????????public?bool?promptPassphrase(String?message) {?return?true; }

?

????????public?bool?promptPassword(String?message) {?return?true; }

????????public?bool?promptYesNo(String?message) {?return?true; }

????????public?void?showMessage(String?message) { }

?

??? }

}

總結

以上是生活随笔為你收集整理的C# SFTP上传文件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。