public class MyFtpClass
{
private readonly string _destIp;
private readonly string _userName;
private readonly string _password;
public MyFtpClass(string desIp, string userName, string passowrd)
{
this._destIp = desIp;
this._userName = userName;
this._password = passowrd;
}
private FtpWebRequest OpenRequest(Uri uri,string ftpMethod)
{
FtpWebRequest request = WebRequest.Create(uri) as FtpWebRequest;
if (request != null)
{
request.Credentials = new NetworkCredential(_userName, _password);
request.UseBinary = true;
request.Method = ftpMethod;
return request;
}
else
{
return null;
} }
private FtpWebResponse OpenResponse(Uri uri, string ftpMethod)
{
FtpWebRequest request= this.OpenRequest(uri, ftpMethod);
if (request != null)
{
FtpWebResponse response = request.GetResponse() as FtpWebResponse;
return response;
}
else
{
return null;
} }
/// <summary>
/// 要上传的本地文件路径
/// </summary>
/// <param name="uploadFilePath">形如:D:\\folder1\\2.jpg </param>
/// <param name="desName">形如:123.jpg 或 subFolder1/123.jpg</param>
/// <returns></returns>
public bool Upload(string uploadFilePath, string desName)
{
Stream requestStream = null;
FtpWebResponse response = null;
try
{
Uri uri = new Uri(string.Format("ftp://{0}/{1}", _destIp, desName));
FtpWebRequest request = OpenRequest(uri, WebRequestMethods.Ftp.UploadFile);
requestStream = request.GetRequestStream(); FileStream fs = File.Open(uploadFilePath, FileMode.Open);
byte[] buff = new byte[];
int buffRead = ;
while (true)
{
int n = fs.Read(buff, buffRead, buff.Length);
if (n == )
{
break;
}
//把文件流写入请求流
requestStream.Write(buff, , n);
} response = (FtpWebResponse)request.GetResponse();
return true;
}
catch (Exception)
{
throw new Exception("上传文件失败!");
}
finally
{
requestStream.Close();
response.Close();
} } /// <summary>
/// 下载文件
/// </summary>
/// <param name="serverFileName">要下载的文件名。形如:123.jpg 或 subFolder1/123.jpg</param>
/// <param name="localPath">下载至本地的路径。形如: D:\\a\\b\\</param>
/// <param name="localName">保存在本地的名称。形如:3.jpg</param>
/// <returns></returns>
public bool Download(string serverFileName, string localPath, string localName)
{
Stream responseStream=null;
FileStream fileStream=null;
try
{
Uri uri = new Uri(string.Format("ftp://{0}/{1}", _destIp, serverFileName));
FtpWebResponse downloadResponse = OpenResponse(uri, WebRequestMethods.Ftp.DownloadFile);
responseStream = downloadResponse.GetResponseStream();
fileStream = File.Create(localPath + localName);
byte[] buffer = new byte[];
while (true)
{
var bytesRead = responseStream.Read(buffer, , buffer.Length);
if (bytesRead == )
break;
//把响应流写入文件
fileStream.Write(buffer, , bytesRead);
} return true;
}
catch
{
throw new Exception("获取下载文件失败!");
}
finally
{
fileStream.Close();
responseStream.Close();
}
}
}
需要注意的流文件的读出和写入问题:
例如,
int n = fs.Read(buff, buffRead, buff.Length);
bufferRead和buff.Length指的是数组buff的索引以及长度。
流文件fs会自动维护一个指针Position,每当read n个字节时,会自动向后移动n个字节。
fileStream.Write(buffer, 0, bytesRead);是同样的道理。
 

Ftp上传下载 C#的更多相关文章

  1. JAVA 实现FTP上传下载(sun.net.ftp.FtpClient)

    package com.why.ftp; import java.io.DataInputStream; import java.io.File; import java.io.FileInputSt ...

  2. windows系统下ftp上传下载和一些常用命令

    先假设一个ftp地址 用户名 密码 FTP Server: home4u.at.china.com User: yepanghuang Password: abc123 打开windows的开始菜单, ...

  3. windows下ftp上传下载和一些常用命令

    先假设一个ftp地址 用户名 密码 FTP Server: home4u.at.china.com User: yepanghuang Password: abc123 打开windows的开始菜单, ...

  4. FTP上传下载工具(FlashFXP) v5.5.0 中文版

    软件名称: FTP上传下载工具(FlashFXP) 软件语言: 简体中文 授权方式: 免费试用 运行环境: Win 32位/64位 软件大小: 7.4MB 图片预览: 软件简介: FlashFXP 是 ...

  5. 高可用的Spring FTP上传下载工具类(已解决上传过程常见问题)

    前言 最近在项目中需要和ftp服务器进行交互,在网上找了一下关于ftp上传下载的工具类,大致有两种. 第一种是单例模式的类. 第二种是另外定义一个Service,直接通过Service来实现ftp的上 ...

  6. C# -- FTP上传下载

    C# -- FTP上传下载 1. C#实现FTP下载 private static void TestFtpDownloadFile(string strFtpPath, string strFile ...

  7. Java.ftp上传下载

    1:jar的maven的引用: 1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="ht ...

  8. python之实现ftp上传下载代码(含错误处理)

    # -*- coding: utf-8 -*- #python 27 #xiaodeng #python之实现ftp上传下载代码(含错误处理) #http://www.cnblogs.com/kait ...

  9. python之模块ftplib(实现ftp上传下载代码)

    # -*- coding: utf-8 -*- #python 27 #xiaodeng #python之模块ftplib(实现ftp上传下载代码) #需求:实现ftp上传下载代码(不含错误处理) f ...

  10. java客户端调用ftp上传下载文件

    1:java客户端上传,下载文件. package com.li.utils; import java.io.File; import java.io.FileInputStream; import ...

随机推荐

  1. php函数类型

    静态变量: <?php function calcute(){ static $num =10; $num = $num+2; echo $num."<br>"; ...

  2. apache 使用htaccess自定义路由机制

    先开启伪静态.详情查看这篇文章:http://www.cnblogs.com/CyLee/p/5544119.html 然后在项目根目录中新建一个.htaccess文件,加入以下代码 正则中()的变量 ...

  3. IOAPIC重定位中断处理函数思路整理

    因为小可并非硬件编程出身,汇编基础又比较差...所以刚开始理解利用IOAPIC重定位技术的时候相当困难. 何为IOAPIC? 首先,必须认识到它是一个硬件,可编程的硬件.我理解的它在整个流程中的作用如 ...

  4. ASP.NET Core 使用 Redis 和 Protobuf 进行 Session 缓存

    前言 上篇博文介绍了怎么样在 asp.net core 中使用中间件,以及如何自定义中间件.项目中刚好也用到了Redis,所以本篇就介绍下怎么样在 asp.net core 中使用 Redis 进行资 ...

  5. 减小ipa体积之删除frameWork中无用mach-O文件

    最近项目末期, 我们团队为了ipa的大小使用不少的体积减小的方法, 除了一些常规的方法之外, 我分享一下自己研究出来的新思路. 首先我们来简单的介绍一下mach-O. 什么是mach-O? Mach- ...

  6. SQL Server 重新组织生成索引

    标签:SQL SERVER/MSSQL SERVER/数据库/DBA/索引/统计信息 概述 无论何时对基础数据执行插入.更新或删除操作,SQL Server 数据库引擎都会自动维护索引.随着时间的推移 ...

  7. Windows+GCC下内存对齐的常见问题

    结构/类对齐的声明方式 gcc和windows对于modifier/attribute的支持其实是差不多的.比如在gcc的例子中,内存对齐要写成: class X { //... } __attrib ...

  8. 用python实现的百度音乐下载器-python-pyqt-改进版

    之前写过一个用python实现的百度新歌榜.热歌榜下载器的博文,实现了百度新歌.热门歌曲的爬取与下载.但那个采用的是单线程,网络状况一般的情况下,扫描前100首歌的时间大概得到40来秒.而且用Pyqt ...

  9. 使用Emit把Datatable转换为对象集合(List<T>)

    Emit生成动态方法部分摘自网上,但是经过修改,加入了对委托的缓存以及类结构的调整,使之调用更简洁方便.大致的思路是:要实现转换datatable到某个指定对象的集合,本质是实现转换一个datarow ...

  10. C#学习系列-文章导航

    C#学习系列-.NET体系结构 C#学习系列-类与结构的区别 C#学习系列-String与string的区别 C#学习系列-抽象方法与虚拟方法的区别 C#学习系列-out与ref的区别 C#学习系列- ...