定义FileStream类的操作类:操作类名: FtpUpDown

上传文件

/// <summary>

/// 上传文件

/// </summary>

/// <param name="localpath">上传文件的全路径 例@"D:\123.txt"</param>

/// <param name="ftppath"></param>

/// <returns></returns>

public bool Upload(string localpath, string ftppath)

{

bool bol = false;

try

{

FileInfo fileInf = new FileInfo(localpath);

//替换符号

ftppath = ftppath.Replace("\\", "/");

//组合ftp上传文件路径

string uri = "ftp://" + ftppath + "/" + fileInf.Name;

// 根据uri创建FtpWebRequest对象

reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));

// 指定数据传输类型

reqFTP.UseBinary = true;

// ftp用户名和密码

reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);

// 默认为true,连接不会被关闭

// 在一个命令之后被执行

reqFTP.KeepAlive = false;

// 指定执行什么命令

reqFTP.Method = WebRequestMethods.Ftp.UploadFile;

// 上传文件时通知服务器文件的大小

reqFTP.ContentLength = fileInf.Length;

// 缓冲大小设置为kb

int buffLength = 2048;

byte[] buff = new byte[buffLength];

int contentLen;

// 打开一个文件流(System.IO.FileStream) 去读上传的文件

FileStream fs = fileInf.OpenRead();

try

{

// 把上传的文件写入流

Stream strm = reqFTP.GetRequestStream();

// 每次读文件流的kb

contentLen = fs.Read(buff, 0, buffLength);

// 流内容没有结束

while (contentLen != 0)

{

// 把内容从file stream 写入upload stream

strm.Write(buff, 0, contentLen);

contentLen = fs.Read(buff, 0, buffLength);

bol = true;

}

// 关闭两个流

strm.Close();

fs.Close();

}

catch (Exception ex)

{

MessageBox.Show("上传文件失败,失败原因;" + ex.Message);

}

}

catch (Exception ex)

{

MessageBox.Show("上传文件失败,失败原因;" + ex.Message);

}

return bol;

}

下载文件:

/// <summary>

/// 下载文件

/// </summary>

/// <param name="localpath"></param>

/// <param name="fileName"></param>

/// <param name="errorinfo"></param>

/// <returns></returns>

public bool Download(string localpath, string fileName, out string errorinfo)

{

try

{

String onlyFileName = Path.GetFileName(fileName);

string newFileName = localpath + "\\" + onlyFileName;

if (File.Exists(newFileName))

{

errorinfo = string.Format("本地文件{0}已存在,无法下载", newFileName);

return false;

}

string url = "ftp://" + ftpServerIP + "/FileInfo/" + fileName;

// 根据uri创建FtpWebRequest对象

reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(url));

// 指定数据传输类型

reqFTP.UseBinary = true;

// ftp用户名和密码

reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);

FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();

Stream ftpStream = response.GetResponseStream();

long cl = response.ContentLength;

int bufferSize = 2048;

int readCount;

byte[] buffer = new byte[bufferSize];

readCount = ftpStream.Read(buffer, 0, bufferSize);

FileStream outputStream = new FileStream(newFileName, FileMode.Create, FileAccess.Write);

while (readCount > 0)

{

outputStream.Write(buffer, 0, readCount);

readCount = ftpStream.Read(buffer, 0, bufferSize);

}

ftpStream.Close();

outputStream.Close();

response.Close();

errorinfo = "";

return true;

}

catch (Exception ex)

{

errorinfo = string.Format("因{0},无法下载", ex.Message);

return false;

}

}

调用方法:

/// <summary>

/// 上传

/// </summary>

/// <param name="sender"></param>

/// <param name="e"></param>

private void Button_Click_1(object sender, RoutedEventArgs e)

{

FtpUpDown ftp = new FtpUpDown(ftpServerIP, ftpUserID, ftpPassword);

string localpath = @"D:\123.txt";

string ftppath =  ftpServerIP + @"\FileInfo";

bool bol = ftp.Upload(localpath, ftppath);

if (bol == true)

MessageBox.Show("上传成功");

else

MessageBox.Show("上传失败");

}

/// <summary>

/// 下载

/// </summary>

/// <param name="sender"></param>

/// <param name="e"></param>

private void Button_Click_2(object sender, RoutedEventArgs e)

{

string errorinfo;

string localpath = @"E:\qzq\FileInfo";

if (!Directory.Exists(localpath))

{

Directory.CreateDirectory(localpath);

}

string filename = "123.txt";

if (!File.Exists(localpath + "\\" + filename))

{

FtpUpDown ftp = new FtpUpDown(ftpServerIP, ftpUserID, ftpPassword);

bool bol = ftp.Download(localpath, filename, out errorinfo);

if (bol == true)

MessageBox.Show("下载成功");

else

MessageBox.Show("下载失败:" + errorinfo + "");

}

else

{

MessageBox.Show("下载文件已存在!");

}

}

其中: ftpServerIP:上传服务的IP地址。

ftpUserID: 上传服务的登录名。

ftpPassword: 上传服务的密码。

C# FileStream进行FTP服务上传文件和下载文件的更多相关文章

  1. C# WebClient进行FTP服务上传文件和下载文件

    定义WebClient使用的操作类: 操作类名称WebUpDown WebClient上传文件至Ftp服务: //// <summary> /// WebClient上传文件至Ftp服务 ...

  2. HCNA管理设置文件系统FTP服务上传下载文件

    1.拓扑图 2.R2配置 The device is running! ###################################### <Huawei>sys Enter s ...

  3. ftp修改上传后目录、文件权限问题 aix

    问题:在AIX操作系统中,用root用户ftp文件到AIX上后,文件的默认权限是rw-r-----,Oracle用户无法读取.有没有办法指定上传文件的权限呢? 环境: AIX 6.1 解决方法: 1. ...

  4. Xshell 本地上传、远程下载文件

    1.Xshell登录工具在创建会话的时候,点击最下面的ZMODEM,可以填写下载的路径和加载的路径:2个路径可以一样也可以不一样: 在下载的时候可以下载到相应的路径去.(我设置的是下载前始终询问) 2 ...

  5. shell通过ftp实现上传/下载文件

    直接代码,shell文件名为testFtptool.sh: #!/bin/bash ########################################################## ...

  6. Selenium(十一):设置元素等待、上传文件、下载文件

    1. 设置元素等待 前面我们接触了几个元素等待方法,sleep.implicitly_wait方法,这一章我们就来整体学一下. 现在大多数Web应用程序使用的都是AJAX技术.当浏览器加载页面时,页面 ...

  7. 20160113006 asp.net实现ftp上传代码(解决大文件上传问题)

    using System;using System.Configuration;using System.Data;using System.Linq;using System.Web;using S ...

  8. Linux中ftp不能上传文件/目录的解决办法

    在linux中不能上传文件或文件夹最多的问题就是权限问题,但有时也不一定是权限问题了,像我就是空间不够用了,下面我来总结一些ftp不能上传文件/目录的解决办法   在排除用户组和权限等问题后,最可能引 ...

  9. c# ftp 上传文件 与 下载文件

    接着上一篇说. 上一篇说了根据配置文件获取路径,并判断路径在服务器中是否存在.如果不存在则在服务器中建立一个. 然后就是往路径下面传输文件了.. 代码: //连接ftp private void Co ...

随机推荐

  1. 分享关于js解析URL中的参数的方法

    function GetQueryString(name) { var reg = new RegExp("(^|&)" + name + "=([^&] ...

  2. IoT与区块链的机遇与挑战

    区块链, 分布式账本技术的一种形式, 自从2014年或多或少地获得了大量的关注: 区块链和物联网, 区块链和安全, 区块链和金融, 区块链和物流, 凡是你能想到的,仿佛都可以应用区块链. 在本文中, ...

  3. Luogu 3373 又乘又加的线段树

    Luogu 3373 又乘又加的线段树 当给一个节点加上一个加法标记时,直接把加法标记 += 新值: 当给一个节点加上一个乘法标记时,把乘法标记和加法标记同时 *= 新值.(注意pushdown函数中 ...

  4. 【洛谷P4706】取石子

    Description ​ 现在 Yopilla 和 yww 要开始玩游戏! ​ 他们在一条直线上标记了 \(n\) 个点,从左往右依次标号为 \(1, 2, ..., n\) .然后在每个点上放置一 ...

  5. wazuh官方安装指南(中文译版本)

      安装Wazuh服务器 Wazuh服务器可以安装在任何类型的Unix操作系统上.最常见安装在Linux上.如果可以为您的系统提供自动化脚本,则安装过程会更容易,但是,从源码构建和安装也非常简单. 通 ...

  6. Android源码批量下载及导入到Eclipse

    1.去http://code.google.com/p/msysgit/downloads/list  下载Git,进行安装 2.生成批量下载脚本文件  下载批量工具CreatAutoGetSh(工具 ...

  7. oracle 视图views

    SELECT * FROM DBA_VIEWS WHERE VIEW_NAME='你的视图名'; SELECT * FROM USER_VIEWS WHERE VIEW_NAME='你的视图名'; S ...

  8. PyQt 5.4参考指南 ---- PyQt5和PyQt4之间的差异

    欢迎关注博主主页,学习python视频资源,还有大量免费python经典文章 sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频) https://study.163.com/course/in ...

  9. java基础-Math类常用方法介绍

    java基础-Math类常用方法介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Math类概念 Math 类包含用于执行基本数学运算的方法,如初等指数.对数.平方根和三角函 ...

  10. css实现0.5像素的边框

    公司的设计师在做设计图的时候都是以iphone6(宽为750物理像素)为基准进行设计的.iphone6的设备像素比(即css像素与物理像素的比例)是2,所以设计师在设计图画了边框为1px的box的时候 ...