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. 安装OS X虚拟机错误vcpu-0:VERIFY vmcore/vmm/main/physMem_monitor.c:1123

    新建一个虚拟机, 选择客户机操作系统为Apple MacOS X 10.10, 其余参数可以默认. 注意建好之后不要急着打开客户机, 因为直接打开你会发现新建的客户机将会无法启动. 仔细阅读Mac O ...

  2. 手把手教android studio中安装Android Butterknife Zelezny (转)

    原文地址:http://blog.csdn.net/xin917480852/article/details/51176524 用来快速生成findViewById() 安装方法: 打开Android ...

  3. 怎么可以让div自适应屏幕的高度?(已解决)

    主要解决问题的方法是用JS脚本. 先看布局, 一个div是首部,另一个div是主体,主体包含左侧菜单和右侧内容. 我想把主体div的高度自适应屏幕剩余区域,怎么做? 首先,获取可见区域的高度,docu ...

  4. SQLServer中的数据库备份和还原

    更多资源:http://denghejun.github.io 备份 SQLServer中的备份,这里是T-SQL的用法,具体示例代码如下,使用也相对简单,其中TestDatabase 是指所需备份的 ...

  5. Excel VBA 函数

    Instr函数 一. 定义 InStr 函数 返回 Variant (Long),指定一字符串在另一字符串中最先出现的位置. InStr([start, ]string1, string2[, com ...

  6. SQL Server通过File Header Page来进行Crash Recovery

    SQL Server通过File Header Page来进行Crash Recovery 看了盖总的一篇文章 http://www.eygle.com/archives/2008/11/oracle ...

  7. 写一个脚本,自动启动tomcat

    我的服务器是使用tomcat的,时不时tomcat的进程会突然结束掉,不知道为什么,从日志上看也没有任何可疑之处,貌似就这样突然没了,接下来的日志都是重新启动tomcat之后打印的了.原因找不到,但要 ...

  8. 图片拾取器-PicPicker

    最近报名参加了360前端星计划,想当一名前端实习生,学习更多更流行的前端知识.然后需要完成一个作业,才能进培训,进了培训还得看运气才能留下,流程不少.书归正传,请看: 课后作业题目 请从下面两个题目中 ...

  9. jqGrid的autoencode参数设置为true在客户端可能引发的编码问题

    不久前使用jqGrid+MVC做过一段时间开发. 一开始,分页参数几乎都是默认值,jqGrid的分页功能很好用. 考虑到each input is evil,我们的系统对安全性又有较高要求,所以,为了 ...

  10. Npm install failed with “cannot run in wd”

    Linux环境下,root账户,安装某些npm包的时候报下面的错误,例如安装grunt-contrib-imagemin时: Error: EACCES, mkdir '/usr/local/lib/ ...