当前位置:首页 > C# > 正文内容

c#实现FTP上传

admin10年前 (2015-12-02)C#5863
C
  • /// <summary>
  • /// 上传文件
  • /// </summary>
  • /// <param name="fileinfo">需要上传的文件</param>
  • /// <param name="targetDir">目标路径</param>
  • /// <param name="hostname">ftp地址</param>
  • /// <param name="username">ftp用户名</param>
  • /// <param name="password">ftp密码</param>
  • public static void UploadFile(FileInfo fileinfo, string targetDir, string hostname, string username, string password)
  • {
  • //1. check target
  • string target;
  • if (targetDir.Trim() == "")
  • {
  • return;
  • }
  • target = Guid.NewGuid().ToString(); //使用临时文件名
  • string URI = "FTP://" + hostname + "/" + targetDir + "/" + target;
  • ///WebClient webcl = new WebClient();
  • System.Net.FtpWebRequest ftp = GetRequest(URI, username, password);
  • //设置FTP命令 设置所要执行的FTP命令,
  • //ftp.Method = System.Net.WebRequestMethods.Ftp.ListDirectoryDetails;//假设此处为显示指定路径下的文件列表
  • ftp.Method = System.Net.WebRequestMethods.Ftp.UploadFile;
  • //指定文件传输的数据类型
  • ftp.UseBinary = true;
  • ftp.UsePassive = true;
  • //告诉ftp文件大小
  • ftp.ContentLength = fileinfo.Length;
  • //缓冲大小设置为2KB
  • const int BufferSize = 2048;
  • byte[] content = new byte[BufferSize - 1 + 1];
  • int dataRead;
  • //打开一个文件流 (System.IO.FileStream) 去读上传的文件
  • using (FileStream fs = fileinfo.OpenRead())
  • {
  • try
  • {
  • //把上传的文件写入流
  • using (Stream rs = ftp.GetRequestStream())
  • {
  • do
  • {
  • //每次读文件流的2KB
  • dataRead = fs.Read(content, 0, BufferSize);
  • rs.Write(content, 0, dataRead);
  • } while (!(dataRead < BufferSize));
  • rs.Close();
  • }
  • }
  • catch (Exception ex) { }
  • finally
  • {
  • fs.Close();
  • }
  • }
  • ftp = null;
  • //设置FTP命令
  • ftp = GetRequest(URI, username, password);
  • ftp.Method = System.Net.WebRequestMethods.Ftp.Rename; //改名
  • ftp.RenameTo = fileinfo.Name;
  • try
  • {
  • ftp.GetResponse();
  • }
  • catch (Exception ex)
  • {
  • ftp = GetRequest(URI, username, password);
  • ftp.Method = System.Net.WebRequestMethods.Ftp.DeleteFile; //删除
  • ftp.GetResponse();
  • throw ex;
  • }
  • finally
  • {
  • //fileinfo.Delete();
  • }
  • // 可以记录一个日志 "上传" + fileinfo.FullName + "上传到" + "FTP://" + hostname + "/" + targetDir + "/" + fileinfo.Name + "成功." );
  • ftp = null;
  • #region
  • /*****
  • *FtpWebResponse
  • * ****/
  • //FtpWebResponse ftpWebResponse = (FtpWebResponse)ftp.GetResponse();
  • #endregion
  • }
  • private static FtpWebRequest GetRequest(string URI, string username, string password)
  • {
  • //根据服务器信息FtpWebRequest创建类的对象
  • FtpWebRequest result = (FtpWebRequest)FtpWebRequest.Create(URI);
  • //提供身份验证信息
  • result.Credentials = new System.Net.NetworkCredential(username, password);
  • //设置请求完成之后是否保持到FTP服务器的控制连接,默认值为true
  • result.KeepAlive = false;
  • return result;
  • }
阅读剩余的50%

扫描二维码推送至手机访问。

版权声明:本文由视觉博客发布,如需转载请注明出处。

本文链接:https://feelsight.cn/post/10.html

标签: C#FTP

“c#实现FTP上传” 的相关文章

c# 串口发送接收数据

/********************** 串口数据接收事件 *****************************/         private void Seri...

UDP穿透NAT的原理与实现(UDP“打洞”原理)

NAT(The IP Network Address Translator) 的概念和意义是什么?NAT, 中文翻译为网络地址转换。具体的详细信息可以访问RFC 1631 - http://www.faqs.org/rfcs/rfc1631.html, 这是对于NAT的定义和解释的最权威的...

安装包制作工具 SetupFactory使用2 API清单

安装包制作工具 SetupFactory使用2 API清单

SetupFactory中可以通过其API控制很复杂的业务需求。   下图中展示了其内置的API种类与具体分类函数。             ...

C#修改图片分辨率

public static Bitmap KiResizeImage(Bitmap bmp, int newW, int newH) { try { Bitmap b =...

C#全局监听Windows键盘事件

1.工具类代码 using System; using System.Collections.Generic; using System.Text; using System.Runtime.InteropServices; using System.Windows...

c# 委托实现多线程的实例/另一个class类调用控件

c# 委托实现多线程的实例/另一个class类调用控件

一、使用线程在窗体中显示进度条 在Winform应用程序中,经常用进度条显示进度信息。这时候就可能用到多线程。如果不采用多线程控制进度条的话,窗口界面很容易假死(无法看到进度信息,看起来像界面卡住了)。 在这个实例中,我们建立一个窗体,窗体中包括一个后台组件,一个进度条控件。当在主窗...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。