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. SQL语句操作数据与一些函数使用的丰富数据库

    数据库有多重要,其实不用我说,但该怎么运用好数据库下SQL语句与其它的如“函数”等等,那就需要我们大家多多去练习并总结其中的窍门,或许你的总结没那么好,担只要你的练习足够多,就算那不是窍门,那也将是你 ...

  2. 【SQLServer】“无法对数据库'XXX' 执行删除,因为它正用于复制”的解决方法

    从今天起,把编程中遇到的所有问题都记录下来,以便今后参考,以及方便网友查阅,希望我的问题可以帮助到很多志同道合的人们,我也是受很多前辈的提点,一步一步走来,希望大家都不要吝啬,将自己遇到的问题记录下来 ...

  3. opecv获取图像轮廓

    获取轮廓 #import <opencv2/opencv.hpp> #import <opencv2/imgcodecs/ios.h> #import <opencv2/ ...

  4. Mono 3.0.12 支持可移植类库

    Mono 3.0.12已于6月19日发布.对跨平台开发者而言,对可移植类库的支持可能是该版本最重要的变化.该技术可以使一个DLL支持.NET.Windows Store.Windows Phone.S ...

  5. CentOS 7 安装RabbitMQ 3.3

    1.安装erlang 语言环境 安装依赖文件 #yum install ncurses-devel 进入 http://www.erlang.org/download.html 选择源文件下载 wge ...

  6. [译]MVC网站教程(三):动态布局和站点管理

    目录 1.   介绍 2.   软件环境 3.   在运行示例代码之前(源代码 + 示例登陆帐号) 4.   自定义操作结果和控制器扩展 1)   OpenFileResult 2)   ImageR ...

  7. String驻留带来的危害

    原创文章转载请注明出处:@协思, http://zeeman.cnblogs.com   前段时间接手了一个项目优化工作,在同等场景下内存使用从4G降低到200M.   项目是将实体序列化成字符串存入 ...

  8. [每日电路图] 9、介绍一种低价简单的4.2V锂电池充电及稳压(LDO)电路——RT9193,SD8017

    消费类电子电路图设计中往往会涉及到4.2V锂离子电池充电电路.及4.2V转3.3V的LDO稳压电路,这里分享一种简单.便宜的设计方案: RT9193 300mA,Ultra-Low Noise,Ult ...

  9. 几个常用Json组件的性能测试

    上一篇文章中我已经介绍了JsonBuilder方案的整体思路以及一个版本的雏形代码,他现在已经是可以使用的了,但是因为是实时反射的,所以效率并不高. 鉴于几位博友对Json转换组件的性能有兴趣,我先放 ...

  10. IOS SWIFT 启动流程学习

    其实和我们java.c一样通过一个main函数作为入口. main封装在了UIApplicationMain里面.所以后者变成启动入口. 他会扫描Info.plist,找到需要加载的入口storybo ...