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) { }

 

    }

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/437838.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Python CheckiO 题解】First Word (simplified)

CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本博客主要记录自己用 Python 在闯关时的做题思路和实现代码,同时也学习学习其他大神写的代码。 Chec…

蜗牛星际ABCD款,这几款的区别你知道吗?

前言 本次文章有可能篇幅会超长,由于全部内容,可能导致万字长文,所以,本篇已经适当做了精简,只针对我目前拥有的蜗牛进行一些介绍,会附带一些教程链接。 每一个功能的实现,以后我都会单独写详…

【Python CheckiO 题解】First Word

CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本博客主要记录自己用 Python 在闯关时的做题思路和实现代码,同时也学习学习其他大神写的代码。 Chec…

【Python CheckiO 题解】Three Words

CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本博客主要记录自己用 Python 在闯关时的做题思路和实现代码,同时也学习学习其他大神写的代码。 Chec…

蜗牛星际 --【功耗测量】

蜗牛星际b单千兆 正面 测量对象:蜗牛星际b单千兆 配置: j1900 16g 固态 4g ddr3l 内存 关机功耗 蜗牛星际待机功耗 蜗牛星际关机的情况下待机功耗为0.6w,一个月消耗不到两毛四分,一年不到三块钱。 开机功耗 未挂硬盘的情况下…

【Python CheckiO 题解】Bigger Price

CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本博客主要记录自己用 Python 在闯关时的做题思路和实现代码,同时也学习学习其他大神写的代码。 Chec…

蜗牛星际:NAS从入门到放弃

预警1,蜗牛矿渣大批量上市是2019年3月的事情了。我写这个大概是2019年10月前后。我挑的最好的时候下手,C款全装只花了245包邮。现在由于市面上货量减少,价格上涨,已经没有原来那么高的性价比了。就连单卖的机箱也从原来的50包邮涨…

【Python CheckiO 题解】Popular Words

CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本博客主要记录自己用 Python 在闯关时的做题思路和实现代码,同时也学习学习其他大神写的代码。 Chec…

个人备忘录

海尔笔记本F2进BIOS F7系统启动菜单 无线网络密码 404 u5b6fnk*

【Python CheckiO 题解】Between Markers (simplified)

CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本博客主要记录自己用 Python 在闯关时的做题思路和实现代码,同时也学习学习其他大神写的代码。 Chec…

Dynamics 365 CRM 开发架构简介

目录 概览 名词解释连接到Dynamics 365 CRM Web APIOrganization service选择 - Web API vs. Organization service扩展服务端扩展应用端正文 Dynamics 365 CRM提供了多种编程模型,你可以灵活地按需选用最佳模式。 本文是对Dynamics 365 CRM编程模型的综述。 回…

【Python CheckiO 题解】Between Markers

CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本博客主要记录自己用 Python 在闯关时的做题思路和实现代码,同时也学习学习其他大神写的代码。 Chec…

Azure手把手系列 1:微软中国公有云概述

很久没有写文章了,主要也是疏于自己的懒惰,对于IT技术的放弃,但我相信浪子回头金不换,所以我又回来了。 相信现在还在泡博客的还在做IT的,或多或少都听过云、私有云及公有云的概念,那么今天给大家分享的是微…

【Python CheckiO 题解】Median

CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本博客主要记录自己用 Python 在闯关时的做题思路和实现代码,同时也学习学习其他大神写的代码。 Chec…

Azure手把手系列 2:微软中国云服务介绍

在前面的文章中,我们已经了解到Azure有两种,分别是由微软直营的国际版,以及微软中国委托21世纪互联运营的国内版,两种Azure存在一定差异,并且数据不互通、帐号以及计费不统一。所以在选择微软公有云的时候也需要注意&a…

【Python CheckiO 题解】Days Between

CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本博客主要记录自己用 Python 在闯关时的做题思路和实现代码,同时也学习学习其他大神写的代码。 Chec…

【Python CheckiO 题解】Striped Words

CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本博客主要记录自己用 Python 在闯关时的做题思路和实现代码,同时也学习学习其他大神写的代码。 Chec…

Azure手把手系列 3:把IT的钱花在刀刃上

对于Azure以及公有云的了解,可谓是永无止境的,用一句客户的话来说就是Azure是大海,只要你往前航行,一定能时不时的发现宝藏;Azure好比是一座冰山,当你以为你已经对Azure很熟悉了,其实这只是冰山…

Azure手把手系列 4:深入了解Azure 一块钱当三块用

通过前面的文章,相信大家对Azure有了一个基础的认识,接下来,我们再来看下作为企业,选择公有云服务最重要的因素之一 价格。我们都知道所谓公有云,就是要让IT资源变成我们生活中类似于水电气的资源,按需使用…

【Python CheckiO 题解】Feed Pigeons

CheckiO 是面向初学者和高级程序员的编码游戏,使用 Python 和 JavaScript 解决棘手的挑战和有趣的任务,从而提高你的编码技能,本博客主要记录自己用 Python 在闯关时的做题思路和实现代码,同时也学习学习其他大神写的代码。 Chec…