标签:
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上传代码
| 
 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
标签:
原文地址:http://www.cnblogs.com/qq260250932/p/4965999.html