关于FTP和SFTP的操作总结
SFTP使用的三方类库是Renci.SshNet.DLL
SFTP连接大部分网上使用IP地址形式的路径,而我本次使用的是网站形式的。类似sftp.XXX.com
SFTP的操作也类似File文件的操作,网上大部分都是写一个Helper类,创建对象,调用方法,但是直接操作也是直接了当的,本次操作总结就直接写方法,不写Helper类。
1.连接SFTP
根据网上很多的操作 使用Host即IP地址,Port端口号,账号密码即可成功。

而我本次在实践中,用此方法,一直提示无法找到这样的主机。
最终使用它的另一个重载方法

只提供host,账号密码便可以成功连接。
代码如下:
<add key="sFTPPath" value="sftp.XXX.com" />
<add key="sFTPUserName" value="XXXXXX" />
<add key="sFTPPwd" value="XXXXXXXX" />
App.config
SftpClient client = new SftpClient(ConfigurationManager.AppSettings["sFTPPath"], ConfigurationManager.AppSettings["sFTPUserName"], ConfigurationManager.AppSettings["sFTPPwd"]);//使用Clinet方法中的HOST NAME PASSWORD方法
client.Connect();//连接Client
bool connected = client.IsConnected;//判断是否连接成功
Sftp连接创建
2.连接SFTP中的操作
2.1 SFTP 上传文件,使用UpoladFile方法,对象都是我们一开始创建的Clinet

代码如下:
<add key="sFTPFolder" value="//XXXXX"/>
APP.config
FileStream fs = File.OpenRead(本地文件);//把文件写成流
string uploadName = ConfigurationManager.AppSettings["sFTPFolder"] + @"/" + name+ ".jgp";//上传的文件地址使用的是相对路径文件 如//XXX/651.JPG
client.UploadFile(fs, uploadName);//上传文件
fs.Close();//关闭流 停止占用文件进程
UploadFile
2.2 SFTP 下载操作 使用DownloadFile方法

代码如下:
<add key="sFTPFolder" value="//XXXXXXX"/>
App.config
string localpath = Path + @"\" + name + ".jgp";//localpath是个完整的路径包含文件名
FileStream fs = File.OpenWrite(localpath);
//把文件写成流
client.DownloadFile(ConfigurationManager.AppSettings["sFTPFolder"] + @"/" + name + ".jpg", fs);//SFTP上的文件也是相对路径加文件名
fs.Close();
DownloadFile
2.3 类似还有获取SFTP文件列表名(返回List),还有SFTP内移动文件等等 可以自己查看操作。
path如 //XXXX/

PS:操作本地文件时地址都是精确到文件名格式 如:F:\\XXX\\XXX\XXX.jpg
操作SFTP上的路径都是相对地址 如://XXXX/XXXX.jpg
操作文件都是精确到文件名的地址
FTP 则提供一个上传方法
public static void FtpSendFile(string filepath, string path, string ftpip, string username, string password)
{ try
{
FileInfo fileInf = new FileInfo(filepath);
string uri = path + fileInf.Name;
FtpWebRequest reqFTP;
reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
reqFTP.Credentials = new NetworkCredential(username, password);
reqFTP.KeepAlive = false;
reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
reqFTP.UseBinary = true;
reqFTP.ContentLength = fileInf.Length;
reqFTP.Proxy = new WebProxy();
int buffLength = ;
byte[] buff = new byte[buffLength];
int contentLen;
FileStream fs = fileInf.OpenRead();
Stream strm = reqFTP.GetRequestStream();
contentLen = fs.Read(buff, , buffLength);
while (contentLen != )
{
strm.Write(buff, , contentLen);
contentLen = fs.Read(buff, , buffLength);
}
strm.Close();
fs.Close();
}
catch (Exception ex)
{
//LogHelper.WriteLog(ex.Message.ToString(), ex);
} }
FtpSendFile
filepath具体文件名地址,path:ftp://XX.XX.XX.XX//XXXXX// (上传到XXXX文件夹下) ip:XXX.XXX.XX.XXX 后面两个参数是账号密码
关于FTP和SFTP的操作总结的更多相关文章
- 我的代码库-Java8实现FTP与SFTP文件上传下载
有网上的代码,也有自己的理解,代码备份 一般连接windows服务器使用FTP,连接linux服务器使用SFTP.linux都是通过SFTP上传文件,不需要额外安装,非要使用FTP的话,还得安装FTP ...
- FTP、SFTP与FTPS
先简单介绍下FTP的基础知识 FTP的传输有两种方式:ASCII.二进制. FTP支持两种模式:Standard (PORT方式,主动方式),Passive (PASV,被动方式). 主动模式 FTP ...
- ftp和sftp
一.ftp ftp是文件传输协议,ftp协议包括两部分,一个是ftp客户端,另一个是ftp服务器. 原理:一般情况下,当使用FTP服务的时候,我们都知道默认是21号端口,其实还有一个20号端口.FTP ...
- 远程登录工具 —— filezilla(FTP vs. SFTP)、xshell、secureCRT
filezilla:是一个免费开源的 FTP 软件,分为客户端版本和服务器版本,具备所有的 FTP 软件功能. 支持的协议:FTP & SFTP(Secure File Transfer Pr ...
- FTP、SFTP、SCP、SSH、OpenSSH关系解密
FTP(File Transfer Protocol):是TCP/IP网络上两台计算机传送文件的协议,FTP是在TCP/IP网络和INTERNET上最早使用的协议之一,它属于网络协议组的应用层.FTP ...
- 通过cmd完成FTP上传文件操作
一直使用 FileZilla 这个工具进行相关的 FTP 操作,而在某一次版本升级之后,发现不太好用了,连接老是掉,再后来完全连接不上去. 改用了一段时间的 Web 版的 FTP 工具,后来那个页面也 ...
- java通过ftp和sftp上传war包上传到Linux服务器实现自动重启tomcat的脚本代码
ar包自动上传Linux并且自动重启tomcat 用的是jdk1.7出的文件监控 支持ftp和sftp,支持多服务器负载等 配置好config 非maven项目导入直接使用 #\u76D1\u542C ...
- FTP服务器搭建及操作(一)
FTP服务器搭建及操作(一) FTP搭建 PHP FTP操作 搭建方法参照(windows):http://www.cnblogs.com/lidan/archive/2012/06/04/25351 ...
- FTP、SFTP文件下载内容校验
描述: 从FTP.SFTP下载的文件做MD5码校验,文件名和MD5码值存放在表格里,表格位置在FTP.SFTP服务器上. os模块只能遍历本地目录/文件,需要先连接FTP.SFTP服务器,将表格下载到 ...
随机推荐
- Sublime text3 Version 3.2.2, Build 3211破解
一.修改hosts hosts地址: C:\Windows\System32\drivers\etc #sublimetext 127.0.0.1 www.sublimetext.com 127.0. ...
- 描述一下 Intent 和 IntentFilter?
Android 中通过 Intent 对象来表示一条消息,一个 Intent 对象不仅包含有这个消息的目的地,还可以包含消息的内容,这好比一封 Email,其中不仅应该包含收件地址,还可以包含具体的内 ...
- Python之 反射、迭代器、生成器
反射 反射就是通过 内置函数getattr() 以字符串的形式导入模块,以字符串的形式调用模块/对象里方法 l=['add','del','set','find'] for i in l: print ...
- os x 技巧: 关闭打字时候光标闪烁
关闭光标闪烁: defaults write -g NSTextInsertionPointBlinkPeriodOff -float 0 defaults write -g NSTextInsert ...
- 细说Linux下的虚拟主机那些事儿
细说Linux下的虚拟主机那些事儿 我们知道Linux操作系统是目前在服务器上应用广泛的操作系统.在Linux操作系统下的虚拟主机是不是就是我们常说的Linux虚拟主机呢?其实从专业方面说并不是,它是 ...
- Java学习之==>注解
一.概述 关于注解,首先引入官方文档的一句话:Java 注解用于为 Java 代码提供元数据.作为元数据,注解不直接影响你的代码执行,但也有一些类型的注解实际上可以用于这一目的.接下我将从注解的定义. ...
- 手机连接电脑,使用adb命令
手机连接电脑使用adb命令,主要是有2种方式,其中最常见的就是第一种,用usb连线使用 1:adb usb - restarts the adbd daemon listening on USB ad ...
- PHP 异步执行方式
在工作中我们经常遇到一些比较耗时的任务,比如用户注册发送邮件,审核短信通知等功能,同步执行这些功能的话,响应时间就会变长,所以一般我们会用队列去管理这些功能,但是如果条件不允许怎么办,今天get了一个 ...
- VTK中,定义imread()函数,读取“.vts"文件
在本程序中,定义了一个imread()函数,用于读取“.vts”文件,第一个参数为文件路径,第二个参数为输出对象,可以输出为tkStructuredGrid型对象,也可以输出为vtkActor型对象. ...
- jmeter业务建模中遇到的问题
1.jmeter函数助手中的jexl3函数,不支持${__jexl3(15<${__Random(1,100,)}<36,)}这种写法,须这样写${__jexl3(15<${__Ra ...