FTP 上传文件
有时候需要通过FTP同步数据文件,除了比较稳定的IDE之外,我们程序员还可以根据实际的业务需求来开发具体的工具,具体的开发过程就不细说了,这里了解一下通过C#实现FTP上传文件到指定的地址。
- /// <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)
- {
- 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.UseBinary = true;
- ftp.UsePassive = true;
- //设置FTP命令 设置所要执行的FTP命令,
- //ftp.Method = System.Net.WebRequestMethods.Ftp.ListDirectoryDetails;//假设此处为显示指定路径下的文件列表
- ftp.Method = System.Net.WebRequestMethods.Ftp.UploadFile;
- //告诉ftp文件大小
- ftp.ContentLength = fileinfo.Length;
- //缓冲大小设置为2KB
- const int BufferSize = ;
- byte[] content = new byte[BufferSize - + ];
- int dataRead;
- //打开一个文件流 (System.IO.FileStream) 去读上传的文件
- using (FileStream fs = fileinfo.OpenRead())
- {
- try
- {
- //把上传的文件写入流
- using (Stream rs = ftp.GetRequestStream())
- {
- do
- {
- //每次读文件流的2KB
- dataRead = fs.Read(content, , BufferSize);
- rs.Write(content, , dataRead);
- } while (!(dataRead < BufferSize));
- rs.Close();
- }
- }
- catch (Exception ex)
- {
- throw new Exception(ex.Message);
- }
- 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;
- }
- 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;
- }
- #endregion
上面的方法有注释可以看到上传的具体思路。
调用就很简单的
FTP 上传文件的更多相关文章
- .net FTP上传文件
FTP上传文件代码实现: private void UploadFileByWebClient() { WebClient webClient = new WebClient(); webClient ...
- 通过cmd完成FTP上传文件操作
一直使用 FileZilla 这个工具进行相关的 FTP 操作,而在某一次版本升级之后,发现不太好用了,连接老是掉,再后来完全连接不上去. 改用了一段时间的 Web 版的 FTP 工具,后来那个页面也 ...
- FTP上传文件到服务器
一.初始化上传控件. 1.我们这里用dropzone.js作为上传控件,下载地址http://www.dropzonejs.com/ 2.这里我们使用一个div元素作为dropzone载体. < ...
- 再看ftp上传文件
前言 去年在项目中用到ftp上传文件,用FtpWebRequest和FtpWebResponse封装一个帮助类,这个在网上能找到很多,前台使用Uploadify控件,然后在服务器上搭建Ftp服务器,在 ...
- FTP上传文件提示550错误原因分析。
今天测试FTP上传文件功能,同样的代码从自己的Demo移到正式的代码中,不能实现功能,并报 Stream rs = ftp.GetRequestStream()提示远程服务器返回错误: (550) 文 ...
- Java ftp 上传文件和下载文件
今天同事问我一个ftp 上传文件和下载文件功能应该怎么做,当时有点懵逼,毕竟我也是第一次,然后装了个逼,在网上找了一段代码发给同事,叫他调试一下.结果悲剧了,运行不通过.(装逼失败) 我找的文章链接: ...
- C# FTP上传文件至服务器代码
C# FTP上传文件至服务器代码 /// <summary> /// 上传文件 /// </summary> /// <param name="fileinfo ...
- Java ftp上传文件方法效率对比
Java ftp上传文件方法效率对比 一.功能简介: txt文件采用ftp方式从windows传输到Linux系统: 二.ftp实现方法 (1)方法一:采用二进制流传输,设置缓冲区,速度快,50M的t ...
- Ftp上传文件
package net.util.common; import java.io.File; import java.io.FileInputStream; import java.io.FileOut ...
随机推荐
- POJ 3009 深度优先搜索
问题:打冰球.冰球可以往上下左右4个方向走,只有当冰球撞到墙时才会停下来,而墙会消失.当冰球紧贴墙时,不能将冰球往那个方向打.冰球出界就当输,超过10次还没将冰球打到目标位置也当输.求用最小次数将冰球 ...
- ubantu14.04 apache2 支持重写模式
想要开启thinkphp的重写模式,apache必须.htaccess支持, 其他情况也有需要开启.htaccess支持的. 下面是ubantu开启方法: 0. .htaccess这个文件应该放在与入 ...
- 关于java中是引用传递还是值传递的问题!!!经常在笔试中遇到,今天终于弄明白了!
关于JAVA中参数传递问题有两种,一种是按值传递(如果是基本类型),另一种是按引用传递(如果是對象).首先以两个例子开始:1)public class Test2 { public static vo ...
- mac 环境下使用virtual box 虚拟机(win7)与主机之间互相ping通
首先选择virtual box设置网络连接方式为网桥 混杂模式设置为全部允许 如下图: 进入虚拟机把虚拟机IP设置和主机在一个网段.如主机是192.168.1.100虚拟机可以设置为192.168.1 ...
- 关于ionic的一些坑(1)
既然来了,总要留下点什么证明自己来过不是,今天就扒一扒自己在ionic上面遇到的坑,因为在项目中2还没出来,所以现在所遇到的都是1中的,关于2的,待老夫以后详细摸索之后在与君细细道来. 1.ionic ...
- HDOJ1251-统计难题(trie树入门)
统计难题 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131070/65535 K (Java/Others) Total Subm ...
- Loadrunner结果分析Graphs
Transactions(用户事务分析)----用户事务分析是站在用户角度进行的基础性能分析. Transation Sunmmary(事务综述)----对事务进行综合分析是性能分析的第一步,通过分析 ...
- 关于material和sharedMaterial的问题
在unity3d中,Renderer组件有两个属性:material和sharedMaterial,它们都可以用来获取Renderer的材质属性.但是它们之间却又很大的区别,下面通过示例来讲解一下. ...
- django: template using & debug
模板的作用方法有如下三种: blog/views.py: from django.template import loader, Context, Template from django.http ...
- html 文字溢出标签
overflow:visible;作用:能看到溢出部分. overflow: hidden;作用:溢出部分看不到 overflow:scroll; 作用:出现一个滚动条(不超过的文字也会在滚动条里) ...