博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
FTP上传及下载
阅读量:5159 次
发布时间:2019-06-13

本文共 5907 字,大约阅读时间需要 19 分钟。

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

上传文件

///          /// 上传文件         ///          /// 上传文件的全路径 例@"D:\123.txt"         ///          /// 
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; } 下载文件: /// /// 下载文件 /// /// /// /// ///
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; } } 调用方法: /// /// 上传 /// /// /// 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("上传失败"); } /// /// 下载 /// /// /// 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: 上传服务的密码

转载于:https://www.cnblogs.com/xiaoyaohan/p/10157131.html

你可能感兴趣的文章
Mysql之库、表、记录相关操作3
查看>>
json字符串转对象的时候,时间格式报错“不是有效的 AllXsd 值。”
查看>>
Java内存管理的小技巧
查看>>
jQuery HTML / CSS 方法
查看>>
《Linux运维趋势》2010-2013年全部期刊下载
查看>>
2015-04-20一些知识点
查看>>
[转]Python与设计模式
查看>>
多线程的自动管理(线程池)
查看>>
BZOJ 1185 最小矩形覆盖
查看>>
关于系统前端开发的那些事
查看>>
Mac 虚拟打印机PDFWriter on Sierra
查看>>
【Demo 0007】Java基础-类扩展特性
查看>>
LeakCanary 内存泄露监测原理研究
查看>>
中英文切换逻辑 前端处理
查看>>
冷启动问题概述
查看>>
Json
查看>>
2015年创新工场校园招聘软件研发岗位笔试题目——矩阵旋转
查看>>
openstack——nova计算服务
查看>>
匿名对象,内部类和访问修饰符应用
查看>>
Autograd:自动微分
查看>>