有时候需要通过FTP同步数据文件,除了比较稳定的IDE之外,我们程序员还可以根据实际的业务需求来开发具体的工具,具体的开发过程就不细说了,这里了解一下通过C#实现FTP上传文件到指定的地址。

  1. /// <summary>
  2. /// 上传文件
  3. /// </summary>
  4. /// <param name="fileinfo">需要上传的文件</param>
  5. /// <param name="targetDir">目标路径</param>
  6. /// <param name="hostname">ftp地址</param>
  7. /// <param name="username">ftp用户名</param>
  8. /// <param name="password">ftp密码</param>
  9. public static void UploadFile(FileInfo fileinfo, string targetDir, string hostname, string username, string password)
  10. {
  11. string target;
  12. if (targetDir.Trim() == "")
  13. {
  14. return;
  15. }
  16. target = Guid.NewGuid().ToString(); //使用临时文件名
  17. string URI = "FTP://" + hostname + "/" + targetDir + "/" + target;
  18. ///WebClient webcl = new WebClient();
  19. System.Net.FtpWebRequest ftp = GetRequest(URI, username, password);
  20. //指定文件传输的数据类型
  21. ftp.UseBinary = true;
  22. ftp.UsePassive = true;
  23. //设置FTP命令 设置所要执行的FTP命令,
  24. //ftp.Method = System.Net.WebRequestMethods.Ftp.ListDirectoryDetails;//假设此处为显示指定路径下的文件列表
  25. ftp.Method = System.Net.WebRequestMethods.Ftp.UploadFile;
  26. //告诉ftp文件大小
  27. ftp.ContentLength = fileinfo.Length;
  28. //缓冲大小设置为2KB
  29. const int BufferSize = ;
  30. byte[] content = new byte[BufferSize - + ];
  31. int dataRead;
  32. //打开一个文件流 (System.IO.FileStream) 去读上传的文件
  33. using (FileStream fs = fileinfo.OpenRead())
  34. {
  35. try
  36. {
  37. //把上传的文件写入流
  38. using (Stream rs = ftp.GetRequestStream())
  39. {
  40. do
  41. {
  42. //每次读文件流的2KB
  43. dataRead = fs.Read(content, , BufferSize);
  44. rs.Write(content, , dataRead);
  45. } while (!(dataRead < BufferSize));
  46. rs.Close();
  47. }
  48.  
  49. }
  50. catch (Exception ex)
  51. {
  52. throw new Exception(ex.Message);
  53. }
  54. finally
  55. {
  56. fs.Close();
  57. }
  58. }
  59. ftp = null;
  60. //设置FTP命令
  61. ftp = GetRequest(URI, username, password);
  62. ftp.Method = System.Net.WebRequestMethods.Ftp.Rename; //改名
  63. ftp.RenameTo = fileinfo.Name;
  64. try
  65. {
  66. ftp.GetResponse();
  67. }
  68. catch (Exception ex)
  69. {
  70. ftp = GetRequest(URI, username, password);
  71. ftp.Method = System.Net.WebRequestMethods.Ftp.DeleteFile; //删除
  72. ftp.GetResponse();
  73. throw ex;
  74. }
  75. finally
  76. {
  77. fileinfo.Delete();
  78. }
  79.  
  80. // 可以记录一个日志 "上传" + fileinfo.FullName + "上传到" + "FTP://" + hostname + "/" + targetDir + "/" + fileinfo.Name + "成功." );
  81. ftp = null;
  82. }
  83. private static FtpWebRequest GetRequest(string URI, string username, string password)
  84. {
  85. //根据服务器信息FtpWebRequest创建类的对象
  86. FtpWebRequest result = (FtpWebRequest)FtpWebRequest.Create(URI);
  87. //提供身份验证信息
  88. result.Credentials = new System.Net.NetworkCredential(username, password);
  89. //设置请求完成之后是否保持到FTP服务器的控制连接,默认值为true
  90. result.KeepAlive = false;
  91. return result;
  92. }
  93. #endregion

上面的方法有注释可以看到上传的具体思路。

调用就很简单的

FTP 上传文件的更多相关文章

  1. .net FTP上传文件

    FTP上传文件代码实现: private void UploadFileByWebClient() { WebClient webClient = new WebClient(); webClient ...

  2. 通过cmd完成FTP上传文件操作

    一直使用 FileZilla 这个工具进行相关的 FTP 操作,而在某一次版本升级之后,发现不太好用了,连接老是掉,再后来完全连接不上去. 改用了一段时间的 Web 版的 FTP 工具,后来那个页面也 ...

  3. FTP上传文件到服务器

    一.初始化上传控件. 1.我们这里用dropzone.js作为上传控件,下载地址http://www.dropzonejs.com/ 2.这里我们使用一个div元素作为dropzone载体. < ...

  4. 再看ftp上传文件

    前言 去年在项目中用到ftp上传文件,用FtpWebRequest和FtpWebResponse封装一个帮助类,这个在网上能找到很多,前台使用Uploadify控件,然后在服务器上搭建Ftp服务器,在 ...

  5. FTP上传文件提示550错误原因分析。

    今天测试FTP上传文件功能,同样的代码从自己的Demo移到正式的代码中,不能实现功能,并报 Stream rs = ftp.GetRequestStream()提示远程服务器返回错误: (550) 文 ...

  6. Java ftp 上传文件和下载文件

    今天同事问我一个ftp 上传文件和下载文件功能应该怎么做,当时有点懵逼,毕竟我也是第一次,然后装了个逼,在网上找了一段代码发给同事,叫他调试一下.结果悲剧了,运行不通过.(装逼失败) 我找的文章链接: ...

  7. C# FTP上传文件至服务器代码

    C# FTP上传文件至服务器代码 /// <summary> /// 上传文件 /// </summary> /// <param name="fileinfo ...

  8. Java ftp上传文件方法效率对比

    Java ftp上传文件方法效率对比 一.功能简介: txt文件采用ftp方式从windows传输到Linux系统: 二.ftp实现方法 (1)方法一:采用二进制流传输,设置缓冲区,速度快,50M的t ...

  9. Ftp上传文件

    package net.util.common; import java.io.File; import java.io.FileInputStream; import java.io.FileOut ...

随机推荐

  1. POJ 3009 深度优先搜索

    问题:打冰球.冰球可以往上下左右4个方向走,只有当冰球撞到墙时才会停下来,而墙会消失.当冰球紧贴墙时,不能将冰球往那个方向打.冰球出界就当输,超过10次还没将冰球打到目标位置也当输.求用最小次数将冰球 ...

  2. ubantu14.04 apache2 支持重写模式

    想要开启thinkphp的重写模式,apache必须.htaccess支持, 其他情况也有需要开启.htaccess支持的. 下面是ubantu开启方法: 0. .htaccess这个文件应该放在与入 ...

  3. 关于java中是引用传递还是值传递的问题!!!经常在笔试中遇到,今天终于弄明白了!

    关于JAVA中参数传递问题有两种,一种是按值传递(如果是基本类型),另一种是按引用传递(如果是對象).首先以两个例子开始:1)public class Test2 { public static vo ...

  4. mac 环境下使用virtual box 虚拟机(win7)与主机之间互相ping通

    首先选择virtual box设置网络连接方式为网桥 混杂模式设置为全部允许 如下图: 进入虚拟机把虚拟机IP设置和主机在一个网段.如主机是192.168.1.100虚拟机可以设置为192.168.1 ...

  5. 关于ionic的一些坑(1)

    既然来了,总要留下点什么证明自己来过不是,今天就扒一扒自己在ionic上面遇到的坑,因为在项目中2还没出来,所以现在所遇到的都是1中的,关于2的,待老夫以后详细摸索之后在与君细细道来. 1.ionic ...

  6. HDOJ1251-统计难题(trie树入门)

    统计难题 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131070/65535 K (Java/Others) Total Subm ...

  7. Loadrunner结果分析Graphs

    Transactions(用户事务分析)----用户事务分析是站在用户角度进行的基础性能分析. Transation Sunmmary(事务综述)----对事务进行综合分析是性能分析的第一步,通过分析 ...

  8. 关于material和sharedMaterial的问题

    在unity3d中,Renderer组件有两个属性:material和sharedMaterial,它们都可以用来获取Renderer的材质属性.但是它们之间却又很大的区别,下面通过示例来讲解一下. ...

  9. django: template using & debug

    模板的作用方法有如下三种: blog/views.py: from django.template import loader, Context, Template from django.http ...

  10. html 文字溢出标签

    overflow:visible;作用:能看到溢出部分. overflow: hidden;作用:溢出部分看不到 overflow:scroll; 作用:出现一个滚动条(不超过的文字也会在滚动条里) ...