C# FileStream进行FTP服务上传文件和下载文件

定义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: 上传服务的密码。

时间: 2024-08-29 10:18:57

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

FTP文件操作 上传文、 下载文件、删除文件 、创建目录

/// <summary> /// FTP上传文件 /// </summary> /// <param name="fileUpload">上传控件</param> /// <param name="ftpServerIP">上传文件服务器IP</param> /// <param name="ftpUserID">服务器用户名</param> ///

ssh批量登录 上传 执行命令 下载文件

用途: 搞linux主机的内网,拿到通用的账户密码,批量登录,上传系统信息收集脚本,把执行的结果拉回本地,用于分析. 缺点: 不支持多线程  密码必须正确切可连通  端口硬编码为22 如果不是22 请自行修改 执行过程: 执行ssh.py root root 会自动登录ssh,上传本地文件目录下的1.py文件到linux服务器tmp目录,执行/tmp/1.py文件,删除/tmp/1.py文件,把1.py执行的文件的生成的test.txt下载回本地.注意:下载的文件名已硬编码在1.py文件28行,

vsftp用户ftp能上传,删除不能下载,umask权限不对

路径: vsftp默认路径 /var/ftp/pub/ 解决方法:编辑/etc/vsftpd/vsftpd.conf # vim /etc/vsftpd/vsftpd.conf 将# local_umask=022 修改成 # local_umask=002 原文地址:https://blog.51cto.com/shunzi115/2414907

C#通过FTP账号上传、修改、删除文件 FTPClient

下面类文件中,主要做的工作是:从ftp服务器上下载文件把本地文件替换.添加.或删除功能,在替换本地文件时会先备份一下本地的文件,若整个操作都完成了就会发出commit命令,表示全部替换成功.若中间操作有失败的,则把本地文件回滚到替换前的样子. 描述: SynchroDataTest.cs(Winform页面类)中的addfiles数组代表要下载到本地的文件(有可能是添加或替换),delfiles数组是要把本地的这些文件删除的数组 string[] addfiles = new string[]

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

using System;using System.Configuration;using System.Data;using System.Linq;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.HtmlControls;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using

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

在linux中不能上传文件或文件夹最多的问题就是权限问题,但有时也不一定是权限问题了,像我就是空间不够用了,下面我来总结一些ftp不能上传文件/目录的解决办法 在排除用户组和权限等问题后,最可能引起ftp下文件无法上传并经常被忽略的因素就是硬盘空间已满,而导致硬盘空间满的问题多数是日志文件所占用的,例如mysql的日志会在不知不觉中变得十分庞大,直至占满剩余的硬盘空间. 解决办法: 1.定期手动清理或使用脚本清理mysql日志或其他相关日志文件. 2.关闭mysql日志(不推荐) 上面是空间有问

腾讯对象存储服务COS加密签名上传文件与下载文件的剖析,福利提供给所有使用Android的小伙伴们!

在做一些用户需求的时候,公司往往需要工程师采集到更多有用的关于用户的个人信息,然后对用户群进行分析,今天我不是来分析这些的,今天我主要是说 腾讯推出的款云产品,那就是对象存储服务COS,这个产品面向所有开发者,新用户都有免费享有10G的使用权,10G可能对于做方案的工程师来说可能是微不 足道的,比如后视镜和车载方案,会常常需要用到视频的存储与云分享,当然这里不是只本地存储哦,我指的是用户在使用方案商的方案的时候,比如他开车 的时候录了一段视频需要分享到某个域,共享给大家看,比如微信,这时候他肯定

****使用ftp软件上传下载php文件时换行符丢失bug

在使用ftp软件上传下载php源文件时,我们偶尔会发现在本地windows下notepad++编辑器写好的php文件,在使用ftp上传到linux服务器后,php文件的换行符全部丢失了,导致php文件无法正常运行. 这个时候,再次通过ftp软件把刚才上传的php文件下载到本地windows,用notepad++编辑器打开后,发现php源代码变成了一行,换行丢失. 发生这种情况的原因是什么呢?飘易就以一句话概括下:    由于linux下换行是\n,而windows下换行是\r\n,当ftp软件在

批处理向FTP上传指定属性的文件 批处理增量备份的例子

使用windows批处理向FTP上传具有指定属性的文件,类似增量备份功能. 对一个目录里的几个文件自动上传FTP时只上传有归档属性的文件,然后FTP上传成功后自动清除(本机)刚上传文件的归档属性. 类似于对文件增量备份的功能. @echo off rem 指定FTP用户名 set ftpUser=FTPUSERNAME rem 指定FTP密码 set ftpPass=FTPPASSWORD rem 指定FTP服务器地址 set ftpIP=192.168.0.2 设置待上传的本地文件夹目录 se