首页 > 编程知识 正文

SFTP服务器搭建及C#实现SFTP上传文件

时间:2023-05-06 18:38:13 阅读:208342 作者:1221

目录

目录

1.sftp使用场景

2.sftp服务器搭建

2.1Windows搭建

3.上传文件到sftp服务器

3.1C#上传文件到sftp服务器

3.1.1创建SFTPHelper类库

3.1.2 调用


1.sftp使用场景

        ftp是大多数网站的文件传输选择工具,但ftp并不是非常安全。sftp是基于默认的22端口,是ssh内含的协议,只要启动了sshd就可以使用。

        建议:更高的效率使用ftp,更安全的通信使用sftp协议。

        ftp是一种文件传输协议,一般是为了方便数据共享的。包括一个ftp服务器和多个ftp客户端。ftp客户端通过ftp协议在服务器上下载资源。而sftp协议是在ftp的基础上对数据进行加密,使得传输的数据相对来说更安全。但是这种安全是以牺牲效率为代价的,也就是说sftp的传输效率比ftp要低。

 ftp要安装,sftp不要安装。sftp更安全,但更安全带来的副作用就是效率比ftp要低些。2.sftp服务器搭建 2.1Windows搭建

2.1.1下载并安装freesshd:http://www.freesshd.com/?ctt=download

        下载后安装,一路点击确认就好,安装时产生key,直接点击确认。

2.1.2安装软件后以管理员身份打开

        在ssh中地址可以选在本地地址,端口选在22端口,安装之后可以看到key是默认有的

 2.1.3新增用户

 2.1.更改认证方式

 2.1.5更改sftp服务器根目录

 2.1.6启动服务

 如果无法启动,应该是之前已经启动,端口被占用,需要进入服务停止,然后在点击重新启动。

 

3.上传文件到sftp服务器 3.1C#上传文件到sftp服务器 3.1.1创建SFTPHelper类库

需先通过NuGet将Renci.SshNet引用到项目中。

using Renci.SshNet;using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Text;using System.Threading.Tasks;namespace PrintDBSQL.Framework.Utility{ public class SFTPHelper { #region 字段或属性 private SftpClient sftp; /// <summary> /// SFTP连接状态 /// </summary> public bool Connected { get { return sftp.IsConnected; } } #endregion #region 构造 /// <summary> /// 构造 /// </summary> /// <param name="ip">IP</param> /// <param name="port">端口</param> /// <param name="user">用户名</param> /// <param name="pwd">密码</param> public SFTPHelper(string ip, string user, string pwd, string port="22") { sftp = new SftpClient(ip, Int32.Parse(port), user, pwd); Connect(); } ~SFTPHelper() { Disconnect(); } #endregion #region 连接SFTP /// <summary> /// 连接SFTP /// </summary> /// <returns>true成功</returns> public bool Connect() { try { if (!Connected) { sftp.Connect(); } return true; } catch (Exception ex) { throw new Exception(string.Format("连接SFTP失败,原因:{0}", ex.Message)); } } #endregion #region 断开SFTP /// <summary> /// 断开SFTP /// </summary> public void Disconnect() { try { if (sftp != null && Connected) { sftp.Disconnect(); } } catch (Exception ex) { throw new Exception(string.Format("断开SFTP失败,原因:{0}", ex.Message)); } } #endregion #region SFTP上传文件 /// <summary> /// SFTP上传文件 /// </summary> /// <param name="localPath">本地文件全路径 例:G:\Project\logo.png</param> /// <param name="remotePath">远程路径 例:/logo.png</param> public bool Put(string localPath, string remotePath) { try { using (var file = File.OpenRead(localPath)) { Connect(); sftp.UploadFile(file, remotePath); Disconnect(); } return true; } catch (Exception ex) { return false; } } #endregion #region SFTP获取文件 /// <summary> /// SFTP获取文件 /// </summary> /// <param name="remotePath">远程路径</param> /// <param name="localPath">本地路径</param> public void Get(string remotePath, string localPath) { try { Connect(); var byt = sftp.ReadAllBytes(remotePath); Disconnect(); File.WriteAllBytes(localPath, byt); } catch (Exception ex) { throw new Exception(string.Format("SFTP文件获取失败,原因:{0}", ex.Message)); } } #endregion #region 删除SFTP文件 /// <summary> /// 删除SFTP文件 /// </summary> /// <param name="remoteFile">远程路径</param> public void Delete(string remoteFile) { try { Connect(); sftp.Delete(remoteFile); Disconnect(); } catch (Exception ex) { throw new Exception(string.Format("SFTP文件删除失败,原因:{0}", ex.Message)); } } #endregion }} 3.1.2 调用

        sftp服务器根目录为:C:\ftpFileLocation。如果将logo.png图片上传至sftp服务器中的MPS文件夹下(即:C:\ftpFileLocationMPSlogo.png),调用如下:

string ip = "192.168.11.196"; string port = "22"; string user = "test"; string pwd = "123"; string localPath = "G:\Project\logo.png"; string remotePath = "/MPS/logo.png"; SFTPHelper SFTPHelper = new SFTPHelper(ip, user, pwd, port); SFTPHelper.Put(localPath, remotePath);

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。