设为首页 收藏本站
查看: 741|回复: 0

Ftp上传类,含更新界面进度条事件[简易封装-不包含异常处理]

[复制链接]

尚未签到

发表于 2015-5-27 08:54:35 | 显示全部楼层 |阅读模式
网吧需要一个魔兽争霸地图管理器;涉及到上传功能;经过MSDN查询了一番;封装了一个简易的Ftpupload类;
先截张图;测试下这个类;
DSC0000.jpg
以下是Ftpupload类的代码 [代码写的简易,不包含异常处理,测试时请填写真实地址和和可用的FTP信息]
如果有朋友看了还不明白;请留个言;我会把连测试程序代码打包发给你

DSC0001.gif DSC0002.gif Code
  1 using System;
  2 using System.Collections.Generic;
  3 using System.Text;
  4 using System.Net;
  5 using System.IO;
  6
  7
  8 /*
  9  *[使用异步操作将文件上载到 FTP 服务器]
10  *
11  *BeginGetRequestStream和EndGetRequestStream
12  *
13  * *********************************************************************
14  * 参数:一个FTP服务器地址                      string类型
15  *
16  *      一个本地文件的位置[需要上传的文件];    string类型
17  *      
18  * 属性:设置要上传到FTP文件名为随机还是手动,     bool类型
19  *      
20  *      FTP服务器用户名和密码;
21  *      
22  * 使用次线程调用,控制进度条:
23  *
24  *          Ftpupload a = new Ftpupload(path,finame,true);//true为自动更换随机文件名
25  *          a.User = FTP用户名;
26  *          a.Password = FTP密码;
27  *          a.fileinfo = finfo;
28  *          a.updateProgress+=new Ftpupload.ProgressHandler(a_updateProgress);
29  *          a.UploadFtpFile();
30  *         
31  * 异步线程操作需要判断控件InvokeRequired属性,然后可以调用委托更新进度   
32  *      
33  *      
34  * *********************************************************************
35  *
36  */
37
38
39 namespace Jiangmingxiang.Program.Ftp_UpLoad
40 {
41     class Ftpupload
42     {
43         //委托更新进度-更新进度事件[updateProgress]
44         public delegate void ProgressHandler(long current, long total);        
45         public event ProgressHandler updateProgress;
46         //成员声明
47         private FtpWebRequest ftpreq;          //Ftp请求对象
48         private Uri uri;
49         private const int bufferLength = 2048; //设置缓冲区大小;
50         private string ftpuri;
51         private string fileuri;
52         private bool namerandom;
53         private string strUser,strPassword;
54         public FileInfo _fileinfo;
55         
56
57         //属性声明
58         public string User
59         {
60             get { return strUser; }
61             set { strUser = value; }
62         }
63
64         public string Password
65         {
66             get { return strPassword; }
67             set { strPassword = value; }
68         }
69
70         public FileInfo fileinfo
71         {
72             get { return _fileinfo; }
73             set { _fileinfo= value; }
74         }
75
76         //构造函数
77         public Ftpupload(string _ftpuri, string _fileuri)
78         {
79             namerandom = false;
80             ftpuri = _ftpuri;//[得到FTP地址]
81             fileuri = _fileuri;//[得到本地文件地址]
82            // fileinfo = new FileInfo(fileuri);
83         }
84
85         public Ftpupload(string _ftpuri,string _fileuri,bool _namerandom)
86         {
87             namerandom = _namerandom;
88             ftpuri = _ftpuri;//[得到FTP地址]
89             fileuri = _fileuri;//[得到本地文件地址]
90            // fileinfo = new FileInfo(fileuri);
91             //UploadFtpFile();
92         }
93
94         //函数声明
95         public void UploadFtpFile()
96         {
97             if (namerandom)
98             {
99                 DateTime tempdate = new DateTime();
100                 tempdate = DateTime.Now;
101                 uri = new Uri(ftpuri + "/" + tempdate.ToString() + fileinfo.Extension);
102             }
103             else
104             {
105                 uri = new Uri(ftpuri+"/"+fileinfo.Name);
106             }
107             ftpreq = (FtpWebRequest)WebRequest.Create(uri);
108             ftpreq.Method = WebRequestMethods.Ftp.UploadFile;
109             NetworkCredential UserAndPassword = new NetworkCredential();
110
111             UserAndPassword.UserName = strUser;
112             UserAndPassword.Password = strPassword;
113             ftpreq.Credentials = UserAndPassword;
114             //开始以异步方式打开请求的内容流以便写入
115             ftpreq.BeginGetRequestStream(new AsyncCallback(EndGetStreamCallback),ftpreq);
116         }
117
118         private void EndGetStreamCallback(IAsyncResult ar)
119         {         
120             Stream requestStream = null;            
121             requestStream = ftpreq.EndGetRequestStream(ar);
122             byte[] buffer = new byte[bufferLength];
123             int count = 0;     //记录已读文件流大小
124             int readBytes = 0; //记录是否读到文件流末尾         
125             long filesize=fileinfo.Length;
126             FileStream stream = File.OpenRead(fileuri);//请求以流的方式写入到FTP上的本地文件
127             do
128             {
129                 readBytes = stream.Read(buffer, 0, bufferLength);
130                 requestStream.Write(buffer, 0, readBytes);
131                 count += readBytes;
132                 if (updateProgress != null)
133                 {                    
134                     updateProgress(count, filesize);
135                 }               
136             }
137             while (readBytes != 0);
138             requestStream.Close();
139             ftpreq.BeginGetResponse(new AsyncCallback(EndGetResponseCallback),ftpreq);
140         }
141
142         private void EndGetResponseCallback(IAsyncResult ar)
143         {         
144             FtpWebResponse response = null;
145             response = (FtpWebResponse)ftpreq.EndGetResponse(ar);
146             response.Close();
147         }        
148     }
149 }
150

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-71041-1-1.html 上篇帖子: C#自动更新(FTP客户端FtpClient.cs) 下篇帖子: CentOS安装FTP 以及FTP、TELNET、VNC服务开启方法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表