模板网站 建设教材,深圳十大国际外贸公司,百度一下首页网页百度,网页qq邮箱怎么发文件给别的邮箱最近工作中用到一个SFTP上传文件的功能#xff0c;因为客户端是C#做的就搜索了一些C#SFTP资料#xff0c;发现网上除了一篇博客外还没有一篇系列完整的整理文档#xff0c;就整理了下#xff0c;希望大家多提建议#xff0c;共同提高。 sftp是Secure File Transfer Protoc… 最近工作中用到一个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) { } }
}