C# FTP上传
public class FtpHelper
{
public FtpHelper(string p_url, string p_user, string p_password)
{
if (!p_url.ToUpper().StartsWith("FTP:"))
{
Url = "ftp://" + p_url;
}
else
{
Url = p_url;
}
User = p_user;
Password = p_password;
} public string Url { get; private set; } public string User { get; private set; } public string Password { get; private set; } public FtpWebRequest CreateConnect(string p_uri)
{
FtpWebRequest reqFTP; // 根据uri创建FtpWebRequest对象
reqFTP = (FtpWebRequest)WebRequest.Create(new Uri(p_uri)); // ftp用户名和密码
reqFTP.Credentials = new NetworkCredential(User, Password); return reqFTP;
} /// <summary>
/// 上传文件
/// </summary>
/// <param name="p_uri">ftp地址 ex=ftp://192.168.100.5//tmp// 切记要以//结尾</param>
/// <param name="p_filename">文件路径地址绝对路径 ex:C:\\Users\ligl\\Desktop\\1.txt</param>
/// <param name="isDelete"></param>
/// <returns></returns>
public bool Upload(string p_uri, string p_filename, bool isDelete = false)
{
var fileInf = new FileInfo(p_filename);
string uri = Path.Combine(p_uri, fileInf.Name); FtpWebRequest reqFTP = CreateConnect(uri);
// 默认为true,连接不会被关闭
// 在一个命令之后被执行
reqFTP.KeepAlive = false; // 指定执行什么命令
reqFTP.Method = WebRequestMethods.Ftp.UploadFile; // 指定数据传输类型
reqFTP.UseBinary = true; // 上传文件时通知服务器文件的大小
reqFTP.ContentLength = fileInf.Length + ; // 缓冲大小设置为2kb
int buffLength = ; var buff = new byte[buffLength];
int contentLen; // 打开一个文件流 (System.IO.FileStream) 去读上传的文件
FileStream fs = fileInf.OpenRead();
try
{
// 把上传的文件写入流
Stream strm = reqFTP.GetRequestStream(); // 每次读文件流的2kb
contentLen = fs.Read(buff, , buffLength); // 流内容没有结束
while (contentLen != )
{
// 把内容从file stream 写入 upload stream
strm.Write(buff, , contentLen); contentLen = fs.Read(buff, , buffLength);
} // 关闭两个流
strm.Close();
fs.Close(); var uploadResponse = (FtpWebResponse)reqFTP.GetResponse();
if (File.Exists(p_filename) && isDelete)
{
File.Delete(p_filename);
}
return (uploadResponse.StatusDescription.StartsWith(""));
}
catch (Exception ex)
{
//System.Windows.MessageBox.Show(ex.Message, "Upload Error");
throw ex;
}
} public bool Delete(string p_filename)
{
var fileInf = new FileInfo(p_filename);
string uri = Path.Combine(Url, fileInf.Name); try
{
var listRequest = (FtpWebRequest)WebRequest.Create(new Uri(uri)); listRequest.Method = WebRequestMethods.Ftp.DeleteFile; listRequest.Credentials = new NetworkCredential(User, Password); var listResponse = (FtpWebResponse)listRequest.GetResponse(); return (listResponse.StatusDescription.StartsWith(""));
}
catch (Exception ex)
{
throw ex;
}
} public bool MakeDir(string p_uri)
{
try
{
string url = Url;
if (string.IsNullOrEmpty(url))
{
return false;
} char lastChar = url[url.Length - ];
if (lastChar != '\\' && lastChar != '/')
{
url += '\\';
} string dir = p_uri.Remove(, url.Length); string[] dirs = dir.Split(new[] { Path.AltDirectorySeparatorChar, Path.DirectorySeparatorChar },
StringSplitOptions.RemoveEmptyEntries); dir = CreateDir(dirs); return CreateMackDir(url, dir);
}
catch (Exception ex)
{
throw ex;
}
} public string CreateDir(string[] p_dirNames)
{
var sb = new StringBuilder(); foreach (string dir in p_dirNames)
{
sb.Append(dir);
sb.Append("\\");
} return sb.ToString();
} public string GetFirstDir(string p_dir)
{
string[] dirs = p_dir.Split(new[] { Path.AltDirectorySeparatorChar, Path.DirectorySeparatorChar },
StringSplitOptions.RemoveEmptyEntries); if (dirs.Length > )
{
return dirs[];
} return string.Empty;
} public string RemvoeDirFromFirst(string p_longDir, string p_firstDir)
{
string value = p_longDir.Remove(, p_firstDir.Length + ); return value;
} private bool CreateMackDir(string p_url, string p_dir)
{
string dir = GetFirstDir(p_dir); if (string.IsNullOrEmpty(dir))
{
return true;
} string newurl = Path.Combine(p_url, dir);
if (!IsExsit(p_url, dir))
{
try
{
FtpWebRequest reqFtp = CreateConnect(newurl);
reqFtp.Method = WebRequestMethods.Ftp.MakeDirectory;
var response = (FtpWebResponse)reqFtp.GetResponse();
response.Close();
}
catch (Exception ex)
{
throw ex;
}
} string newdir = RemvoeDirFromFirst(p_dir, dir);
CreateMackDir(newurl, newdir); return true;
} public bool IsExsit(string p_url, string p_dir)
{
string[] list = GetFileList(p_url, WebRequestMethods.Ftp.ListDirectory); if (list == null || list.Length == )
{
return false;
} return list.Contains(p_dir);
} private string[] GetFileList(string path, string WRMethods) //上面的代码示例了如何从ftp服务器上获得文件列表
{
var result = new StringBuilder(); try
{
string tempPath = path;
if (!path.EndsWith("/"))
{
tempPath += "/";
} FtpWebRequest reqFtp = CreateConnect(tempPath);
reqFtp.Method = WRMethods;
WebResponse response = reqFtp.GetResponse();
var reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8); //中文文件名
string line = reader.ReadLine();
while (line != null)
{
result.Append(line);
result.Append("\n");
line = reader.ReadLine();
}
// to remove the trailing '/n'
if (result.Length > )
{
result.Remove(result.ToString().LastIndexOf('\n'), );
}
reader.Close();
response.Close();
return result.ToString().Split('\n');
}
catch (Exception ex)
{
throw ex;
}
}
}
C# FTP上传的更多相关文章
- .net FTP上传文件
FTP上传文件代码实现: private void UploadFileByWebClient() { WebClient webClient = new WebClient(); webClient ...
- 通过cmd完成FTP上传文件操作
一直使用 FileZilla 这个工具进行相关的 FTP 操作,而在某一次版本升级之后,发现不太好用了,连接老是掉,再后来完全连接不上去. 改用了一段时间的 Web 版的 FTP 工具,后来那个页面也 ...
- FTP上传文件到服务器
一.初始化上传控件. 1.我们这里用dropzone.js作为上传控件,下载地址http://www.dropzonejs.com/ 2.这里我们使用一个div元素作为dropzone载体. < ...
- 再看ftp上传文件
前言 去年在项目中用到ftp上传文件,用FtpWebRequest和FtpWebResponse封装一个帮助类,这个在网上能找到很多,前台使用Uploadify控件,然后在服务器上搭建Ftp服务器,在 ...
- 【完整靠谱版】结合公司项目,仔细总结自己使用百度编辑器实现FTP上传的完整过程
说在前面 工作中会遇到很多需要使用富文本编辑器的地方,比如我现在发布这篇文章离不开这个神器,而且现在网上编辑器太多了.记得之前,由于工作需要自己封装过一个编辑器的公共插件,是用ckeditor改版的, ...
- FTP上传文件提示550错误原因分析。
今天测试FTP上传文件功能,同样的代码从自己的Demo移到正式的代码中,不能实现功能,并报 Stream rs = ftp.GetRequestStream()提示远程服务器返回错误: (550) 文 ...
- JAVA 实现FTP上传下载(sun.net.ftp.FtpClient)
package com.why.ftp; import java.io.DataInputStream; import java.io.File; import java.io.FileInputSt ...
- FTP上传-封装工具类
import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import ja ...
- 记一次FTP上传文件总是超时的解决过程
好久没写博,还是重拾记录一下吧. 背景:买了一个阿里云的云虚拟机用来搭建网站(起初不了解云虚拟主机和云服务器的区别,以为都是有SSH功能的,后来发现不是这样样子啊,云虚拟机就是FTP上传网页+MySQ ...
- FlashFXP(强大的FXP/ftp上传工具)V5.0.0.3722简体中文特别版
flashfxp是功能强大的fxp/ftp软件,融合了一些其他优秀ftp软件的优点,如像cuteftp一样可以比较文件夹, FlashFXP是一款功能强大的FXP/ftp上传工具, FlashFXP集 ...
随机推荐
- 编写可测试的JavaScript代码
<编写可测试的JavaScript代码>基本信息作者: [美] Mark Ethan Trostler 托斯勒 著 译者: 徐涛出版社:人民邮电出版社ISBN:9787115373373上 ...
- 【Windows 10 IoT - 1】Window 10系统安装(树莓派 Pi2)
一.硬件准备 (1).树莓派Pi2 (2).8G 10速Micro SD卡 (3).LCD显示器(如果是VGA接口,需要加一个HDMI转VGA模块) (4).鼠标 (5).安装Windows 10的P ...
- Oracle行内链接不会引起USER_TABLES中CHAIN_CNT值变化
前几天和群里网友讨论一个关于行内链接(intra-block chaining)的问题,问题非常有意思,恰好今天有空,顺便整理了一下这些知识点. 问题描述:下面SQL,创建一个超过255列的表(实际为 ...
- 如何删除或重置spfile中的参数
在ORACLE中,修改spfile中的参数一般非常容易,那么如何删除spfile中的参数呢? 下面我们用一个案例来介绍一下,如何删除spfile中的参数,一种方法就是创建对应的pfile,删除对应的参 ...
- javascript 基础教程[温故而知新一]
子曰:“温故而知新,可以为师矣.”孔子说:“温习旧知识从而得知新的理解与体会,凭借这一点就可以成为老师了.“ 尤其是咱们搞程序的人,不管是不是全栈工程师,都是集十八般武艺于一身.不过有时候有些知识如果 ...
- Windows下常用软件工具的命令
Linux上主要操作是命令,懂一点linux知识的都知道,其实windows下边很多工具也是可以用命令来操作打开的,这样会提高效率,节省很多的时间.下边就记录一下常用的命令. 一.常用命令 1.远程桌 ...
- 使用Tcmalloc进行堆栈分析
在前一篇译文<使用TCmalloc的堆栈检查>,介绍了Tcmalloc进行堆栈检查,今天翻译<heap-profiling using tcmalloc>,了解如何 TCmal ...
- python paramiko
paramiko 遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接,可以实现远程文件的上传,下载或通过ssh远程执行命令. 项目地址:https://github.com/paramik ...
- [转]Oracle 分组聚合二种写法,listagg和wmsys.wm_concat
本文转自:http://www.cnblogs.com/ycdx2001/p/3502495.html with temp as( select 'China' nation ,'Guangzhou' ...
- monkey学习笔记
Monkey一. Monkey 是什么?Monkey是Android中的一个命令行工具,它其实就是SDK中附带的一个工具,可以运行在模拟器里或实际设备中. 二.Monkey 测试的目的?Monkey测 ...