C# ftp 上传、下载、删除

  1  public class FtpHelper
  2     {
  3         public static readonly FtpHelper Instance = new FtpHelper();
  4
  5         /// <summary>
  6         /// 取得文件名
  7         /// </summary>
  8         /// <param name="ftpPath">ftp路径</param>
  9         /// <returns></returns>
 10         public string[] GetFilePath(string userId, string pwd, string ftpPath)
 11         {
 12             string[] downloadFiles;
 13             StringBuilder result = new StringBuilder();
 14             FtpWebRequest reqFTP;
 15             try
 16             {
 17                 reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpPath));
 18                 reqFTP.UseBinary = true;
 19                 reqFTP.Credentials = new NetworkCredential(userId, pwd);
 20                 reqFTP.Method = WebRequestMethods.Ftp.ListDirectory;
 21                 reqFTP.UsePassive = false;
 22                 WebResponse response = reqFTP.GetResponse();
 23                 StreamReader reader = new StreamReader(response.GetResponseStream());
 24                 string line = reader.ReadLine();
 25                 while (line != null)
 26                 {
 27                     result.Append(line);
 28                     result.Append("\n");
 29                     line = reader.ReadLine();
 30                 }
 31                 result.Remove(result.ToString().LastIndexOf(‘\n‘), 1);
 32                 reader.Close();
 33                 response.Close();
 34                 return result.ToString().Split(‘\n‘);
 35             }
 36             catch (Exception ex)
 37             {
 38                 downloadFiles = null;
 39                 return downloadFiles;
 40             }
 41         }
 42
 43         //ftp的上传功能
 44         public void Upload(string userId, string pwd, string filename, string ftpPath)
 45         {
 46             FileInfo fileInf = new FileInfo(filename);
 47             FtpWebRequest reqFTP;
 48             // 根据uri创建FtpWebRequest对象
 49             reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpPath + fileInf.Name));
 50             // ftp用户名和密码
 51             reqFTP.Credentials = new NetworkCredential(userId, pwd);
 52
 53             reqFTP.UsePassive = false;
 54             // 默认为true,连接不会被关闭
 55             // 在一个命令之后被执行
 56             reqFTP.KeepAlive = false;
 57             // 指定执行什么命令
 58             reqFTP.Method = WebRequestMethods.Ftp.UploadFile;
 59             // 指定数据传输类型
 60             reqFTP.UseBinary = true;
 61             // 上传文件时通知服务器文件的大小
 62             reqFTP.ContentLength = fileInf.Length;
 63             // 缓冲大小设置为2kb
 64             int buffLength = 2048;
 65             byte[] buff = new byte[buffLength];
 66             int contentLen;
 67             // 打开一个文件流 (System.IO.FileStream) 去读上传的文件
 68             FileStream fs = fileInf.OpenRead();
 69             try
 70             {
 71                 // 把上传的文件写入流
 72                 Stream strm = reqFTP.GetRequestStream();
 73                 // 每次读文件流的2kb
 74                 contentLen = fs.Read(buff, 0, buffLength);
 75                 // 流内容没有结束
 76                 while (contentLen != 0)
 77                 {
 78                     // 把内容从file stream 写入 upload stream
 79                     strm.Write(buff, 0, contentLen);
 80                     contentLen = fs.Read(buff, 0, buffLength);
 81                 }
 82                 // 关闭两个流
 83                 strm.Close();
 84                 fs.Close();
 85             }
 86             catch (Exception ex)
 87             {
 88
 89             }
 90         }
 91
 92         public void Delete(string userId, string pwd, string ftpPath, string fileName)
 93         {
 94             FtpWebRequest reqFTP;
 95             try
 96             {
 97                 reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpPath + fileName));
 98                 reqFTP.Method = WebRequestMethods.Ftp.DeleteFile;
 99                 reqFTP.UseBinary = true;
100                 reqFTP.Credentials = new NetworkCredential(userId, pwd);
101                 reqFTP.UsePassive = false;
102                 FtpWebResponse listResponse = (FtpWebResponse)reqFTP.GetResponse();
103                 string sStatus = listResponse.StatusDescription;
104             }
105             catch (Exception ex)
106             {
107                 throw ex;
108             }
109         }
110
111         //从ftp服务器上下载文件的功能
112         public void Download(string userId, string pwd, string ftpPath, string filePath, string fileName)
113         {
114             FtpWebRequest reqFTP;
115             try
116             {
117                 FileStream outputStream = new FileStream(filePath + "\\" + fileName, FileMode.Create);
118                 reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpPath + fileName));
119                 reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
120                 reqFTP.UseBinary = true;
121                 reqFTP.Credentials = new NetworkCredential(userId, pwd);
122                 reqFTP.UsePassive = false;
123                 FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
124                 Stream ftpStream = response.GetResponseStream();
125                 long cl = response.ContentLength;
126                 int bufferSize = 2048;
127                 int readCount;
128                 byte[] buffer = new byte[bufferSize];
129                 readCount = ftpStream.Read(buffer, 0, bufferSize);
130                 while (readCount > 0)
131                 {
132                     outputStream.Write(buffer, 0, readCount);
133                     readCount = ftpStream.Read(buffer, 0, bufferSize);
134                 }
135                 ftpStream.Close();
136                 outputStream.Close();
137                 response.Close();
138
139
140             }
141             catch (Exception ex)
142             {
143                 throw ex;
144             }
145         }
146
147     }

http://blog.csdn.net/csethcrm/article/details/8139744

========================================

因公司要求,整理公司资源,把现有的资源上传的一个电脑上(在一个同事的电脑上腾出了空间,把所有的资源上传的此电脑上),我在这个电脑上装了SQL2008+serv_u+IIS7,我用的是c# winform+webservice,数据库操作通过webservice进行,上传文件用ftp批量上传,上传整个文件夹,一下是文件夹目录

文件夹总大小100MB以上,有时候单独一个文件也有10-100mb左右,
一下是ftp上传代码

C# code

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

public void Upload(string filename,string foldername)

        {

            try

            {

                FileInfo fileInf = new FileInfo(filename);

                string uri = "ftp://" + ftpServerIP + "/" + foldername + "/" + fileInf.Name;

                Connect(uri);//连接

                // 默认为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);

                    }

                    // 关闭两个流

                    strm.Close();

                    fs.Close();

                }

                catch (Exception ex)

                {

                    MessageBox.Show(ex.Message, "Upload Error");

                }

            }

            catch

            { }

        }

可以通过遍历批量上传文件,但是上传速度很慢,很慢。上传一个文件夹都要花上半天,我想问有没有办法提高上传速度,或者要用别的上传方法。(用别的方法也可以,因为ftp上传我第一次接触,不太熟悉)请各位给个意见,小弟感激不尽!还有上传的时候要加上进度条。请各位大侠高手们帮忙。


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

private void Form1_Load(object sender, EventArgs e)

        {

            ftpServerIP = "192.168.239.83";

            ftpUserID = "ftptest";

            ftpPassword = "test";

        }

        private void btnUpload_Click(object sender, EventArgs e)

        {

            OpenFileDialog opFilDlg = new OpenFileDialog();

            if (opFilDlg.ShowDialog() == DialogResult.OK)

            {

                Upload(opFilDlg.FileName);

            }

        }

     

        private void Upload(string filename)

        {

            FileInfo fileInf = new FileInfo(filename);

            string uri = "ftp://" + ftpServerIP + "/" + fileInf.Name;

            FtpWebRequest reqFTP;

            reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + ftpServerIP + "/" + fileInf.Name));

            reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);

            reqFTP.KeepAlive = false;

            reqFTP.Method = WebRequestMethods.Ftp.UploadFile;

            reqFTP.UseBinary = true;

            reqFTP.ContentLength = fileInf.Length;

            int buffLength = 2048;

            byte[] buff = new byte[buffLength];

            int contentLen;

            FileStream fs = fileInf.OpenRead();

            try

            {

                Stream strm = reqFTP.GetRequestStream();

                contentLen = fs.Read(buff, 0, buffLength);

                while (contentLen != 0)

                {

                    strm.Write(buff, 0, contentLen);

                    contentLen = fs.Read(buff, 0, buffLength);

                }

                strm.Close();

                fs.Close();

            }

            catch (Exception ex)

            {

                MessageBox.Show(ex.Message, "上传出错");

                return;

            }

            MessageBox.Show("上传成功!");

        }

参考以上代码。

http://bbs.csdn.net/topics/391033851

时间: 2024-12-15 18:41:08

C# ftp 上传、下载、删除的相关文章

windows下ftp上传下载和一些常用命令

先假设一个ftp地址 用户名 密码 FTP Server: home4u.at.china.com User: yepanghuang Password: abc123 打开windows的开始菜单,执行“运行”命令,在对话框中输入ftp,按下“确定”按钮将会切换至DOS窗口,出现命令提示符 ftp>键入命令连接FTP服务器: ftp> open home4u.at.china.com (回车) 稍等片刻,屏幕提示连接成功: ftp> connected to home4u.china.

java做的比较完善的FTP上传下载文件服务器源码

Filename: ftp.java Author: leetsing(elove) Create date: 2004-08-30 Use: connect to FTP server,then upload and download file Modify date: 2004-09-05 add to upload file 2004-09-13 add to download file Copy right: Magisky Media Technology Co.,Ltd. *****

2.1.5基础之命令行链接ftp dos中的ftp上传下载文件

Windows命令行batcmd脚本的应用之自动备份 异地备份2.1.5基础之命令行链接ftp dos中的ftp上传下载文件 讲解环境 VMware Workstation 12 桌面虚拟计算机软件创建虚拟机安装操作系统:http://edu.51cto.com/course/10007.html PC1:192.168.1.201 远程地址:192.168.100.100:2001 windows service2008 pc1 Admin111FTP虚拟用户 fileaa fileaaPC2

python之实现ftp上传下载代码(含错误处理)

# -*- coding: utf-8 -*- #python 27 #xiaodeng #python之实现ftp上传下载代码(含错误处理) #http://www.cnblogs.com/kaituorensheng/p/4480512.html#_label2 import ftplib import socket import os def ftpconnect(ftp_info): try: ftp = ftplib.FTP(ftp_info[0]) except (socket.er

python之模块ftplib(实现ftp上传下载代码)

# -*- coding: utf-8 -*- #python 27 #xiaodeng #python之模块ftplib(实现ftp上传下载代码) #需求:实现ftp上传下载代码(不含错误处理) from ftplib import FTP def ftpconnect(): ftp_server='ftp.python.org' ftp=FTP() ftp.set_debuglevel(2)#打开调式级别2 ftp.connect(ftp_server,21) ftp.login('',''

python网络编程socket模块实现ftp上传下载

本实验实现ftp上传文件下载文件功能,并具有校验文件完整性,打印进度条功能, 主要练习socket,struct模块. ftp用户文件存放在user.json文件中 user.json文件内容 {"lisi": "abcdef", "hyh": "123456"} ftp客户端脚本ftpclient.py #!/usr/bin/python # --*-- coding: utf-8 --*-- import socket i

简单的FTP上传下载(java实现)

/** *阅读前请自己在win7上建立FTP主机 *具体步骤如:http://jingyan.baidu.com/article/574c5219d466c36c8d9dc138.html * 然后将以下FTP,username,password分别改成你的FTP ip地址 用户名 密码即可 * 本例子用了apche的commons-net-3.3.jar以方便FTP的访问 请手动buid -path * 待完成版 刷新按钮 登录 都还没有做 而且上传 下载 完成后都需要重新运行 * 2014-

C# FTP 上传 下载(汇总)

1.C# 上传下载ftp(支持断点续传) 2. C# FTP上传下载(支持断点续传)

java ftp上传下载

/** * Description: 从FTP服务器下载文件 * @param url FTP服务器hostname * @param port FTP服务器端口 * @param username FTP登录账号 * @param password FTP登录密码 * @param remotePath FTP服务器上的相对路径 * @param fileName 要下载的文件名 * @param localPath 下载后保存到本地的路径 * @return */ public static

FTP 上传下载工具类

import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.SocketException; import o