C# 基于Ftp协议开发文件上传和下载工具基础

1 ftp (File Transfer Protocol): 文件传输协议

2 原理: 基于TCP生成虚拟连接信息控制器(账户,密码,权限),再另外基于tcp生成文件传输控制器。

3 开发基础知识

  下载:将文件从其他的远程主机(服务器)复制到本地计算机的过程

   上传:将本地文件复制到远程主机(服务器)的过程

a  URL  ,URI,URN

URL 统一资源定位符

URL格式 :scheme://host.port/path?#fragament

1fa10ff85617b30d8082401e4f1e5e53485.jpg

URI :统一资源标识符

URN:统一资源名称

b  用的类 

文件:

Fileinfo ,FileStream,Stream,NetwokStream ,StreamReader 

网络:WebCilent RequestWeb ,WebResponse,   FtpWebRequest

c   下载文件和上传文件的过程

  上传

  //上传文件
        public void UpLoad(string  pathname) {

            FileInfo finf = new FileInfo(pathname);

            //实现文件传输协议
            FtpWebRequest reqftp;
            reqftp = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp:\\"+ftpserverIP+"/"+pathname));
            //创建通信凭证
            reqftp.Credentials = new NetworkCredential(uname,upwd);
            //去掉包活技术
            reqftp.KeepAlive = false;

          //为上传的方法
            reqftp.Method = WebRequestMethods.Ftp.UploadFile;
            reqftp.UseBinary = true;

          //设置上传文件的大小
            reqftp.ContentLength = finf.Length;
            int buffer = 2048;
            byte [] dat=new byte[buffer];
            int contentlent;
            //上传数据
            FileStream fs = finf.OpenRead();
            try
            {
                Stream strm = reqftp.GetRequestStream();
                //读取数据流
                contentlent = fs.Read(dat, 0, buffer);
                while (contentlent != 0)
                {
                    strm.Write(dat,0,contentlent);
                    contentlent = fs.Read(dat, 0, buffer);
                }
                //结束关闭数据流
                strm.Close();
                fs.Close();

            }
            catch (IOException ioe)
            {

                MessageBox.Show(ioe.Message+"文件上传出错");
            }

        }

  下载

     

  //下载文件
        public void DownLoad(string select,string fname) {

            FtpWebRequest reqftp;
            try
            {
                FileStream output = new FileStream(fname, FileMode.Create);
                reqftp = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://"+ftpserverIP+"/"+fname));
                reqftp.Method = WebRequestMethods.Ftp.DownloadFile;
                reqftp.UseBinary = true;
                reqftp.Credentials = new NetworkCredential(uname,upwd);
                //响应数据
                FtpWebResponse response = (FtpWebResponse)reqftp.GetResponse();
                Stream ftpstream = response.GetResponseStream();
                long cl = response.ContentLength;
                int buffersize = 2048;
                int readcount;
                byte[] buffer = new byte[buffersize];
                readcount = ftpstream.Read(buffer,0,buffersize);
                //继续读取数据
                while (readcount > 0)
                {

                    output.Write(buffer,0,readcount);
                    readcount = ftpstream.Read(buffer, 0, buffersize);
                }
                //关闭数据流
                output.Close();
                ftpstream.Close();
            }
            catch(Exception e) { 
            
            }
        
        }

转载于:https://my.oschina.net/u/3768017/blog/1922324

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值