FTP(FtpWebRequest/FtpWebResponse) 上传下载

 //上传文件
            string strlocalFileName = txtName.EditValue.ToStringEx();
            FileInfo fiLocalFileInfo = new FileInfo(strlocalFileName);
            if (!fiLocalFileInfo.Exists)
            {
                MessageBox.Show("file not exists");
                return;
            }

            string strFtpFileName = Guid.NewGuid().ToString() + fiLocalFileInfo.Extension;//目标文件,文件名和扩展名

            //组装FTP文件名全路径
            StringBuilder sbFtpFullFileName = new StringBuilder();
            string strTrimFtpRoot;
            if (!(strTrimFtpRoot = FTPRoot.Trim(CHARS_TRIM)).IsNullOrEmpty())
                sbFtpFullFileName.Append(strTrimFtpRoot).Append("/");
            string strTrimFtpFolder;
            if (!FTPFloderName.IsNullOrEmpty() && !(strTrimFtpFolder = FTPFloderName.Trim(CHARS_TRIM)).IsNullOrEmpty())
                sbFtpFullFileName.Append(strTrimFtpFolder);
            CreateDirectory(sbFtpFullFileName.ToString().Replace("\\", "/"));//尝试创建文件夹
            sbFtpFullFileName.Append("/").Append(strFtpFileName);

            FtpWebRequest freqFtpRequest = (FtpWebRequest)FtpWebRequest.Create(sbFtpFullFileName.ToString().Replace("\\", "/"));
            freqFtpRequest.Proxy = null;//     获取或设置用于与 FTP 服务器通信的代理。
            freqFtpRequest.UseBinary = true;//该值指定文件传输的数据类型。
            freqFtpRequest.KeepAlive = false;//该值指定在请求完成之后是否关闭到 FTP 服务器的控制连接。
            freqFtpRequest.Method = WebRequestMethods.Ftp.UploadFile;     //     获取或设置要发送到 FTP 服务器的命令。
            freqFtpRequest.UsePassive = false;  //选择主动还是被动模式 ,  这句要加上的。
            freqFtpRequest.ContentLength = fiLocalFileInfo.Length; //获取或设置被 System.Net.FtpWebRequest 类忽略的值。
            if (!FTPUserName.IsNullOrEmpty())
                freqFtpRequest.Credentials = new NetworkCredential(FTPUserName, FTPPassword);//     用指定的用户名和密码初始化 System.Net.NetworkCredential 类的新实例。

            //上传文件 通过Stream上传
            using (Stream sFtpStream = freqFtpRequest.GetRequestStream())
            {
                using (FileStream fsLocalStream = File.Open(strlocalFileName, FileMode.Open))
                {
                    byte[] arrBuffer = new byte[1024];
                    int nReadBytes = 0;
                    while ((nReadBytes = fsLocalStream.Read(arrBuffer, 0, arrBuffer.Length)) != 0)
                    {
                        sFtpStream.Write(arrBuffer, 0, nReadBytes);
                    }

                    txtFtpFileName.EditValue = strFtpFileName;//目标文件名称赋值到txtFtpFileName控件
                }
            }

//FTP上创建文件夹
        private void CreateDirectory(string p)
        {
            try
            {
                FtpWebRequest freqFtpRequest = (FtpWebRequest)FtpWebRequest.Create(p);
                freqFtpRequest.Proxy = null;
                freqFtpRequest.UseBinary = true;
                freqFtpRequest.KeepAlive = false;
                freqFtpRequest.Method = WebRequestMethods.Ftp.MakeDirectory;
                freqFtpRequest.ContentLength = 0;
                freqFtpRequest.UsePassive = false;  //选择主动还是被动模式 ,  这句要加上的。
                if (!FTPUserName.IsNullOrEmpty())
                    freqFtpRequest.Credentials = new NetworkCredential(FTPUserName, FTPPassword);

                using (freqFtpRequest.GetResponse())
                {
                }
            }
            catch (WebException e)
            {
                if (e.Status == WebExceptionStatus.ConnectFailure)
                    throw;
            }
        }



 //下载文件
 //组装FTP文件名全路径
            StringBuilder sbFtpFullFileName = new StringBuilder();
            string strTrimFtpRoot;
            if (!(strTrimFtpRoot = FTPRoot.Trim(CHARS_TRIM)).IsNullOrEmpty())
                sbFtpFullFileName.Append(strTrimFtpRoot).Append("/");
            string strTrimFtpFolder;
            if (!FTPFloderName.IsNullOrEmpty() && !(strTrimFtpFolder = FTPFloderName.Trim(CHARS_TRIM)).IsNullOrEmpty())
                sbFtpFullFileName.Append(strTrimFtpFolder).Append("/");
            sbFtpFullFileName.Append("2016.1.4.txt");

            //创建FTP连接请求
            FtpWebRequest ftpReqFtpRequest = (FtpWebRequest)FtpWebRequest.Create(sbFtpFullFileName.ToString().Replace("\\", "/"));
            ftpReqFtpRequest.Proxy = null;
            ftpReqFtpRequest.UseBinary = true;
            ftpReqFtpRequest.KeepAlive = false;
            ftpReqFtpRequest.UsePassive = false;  //选择主动还是被动模式 ,  这句要加上的。
            ftpReqFtpRequest.Method = WebRequestMethods.Ftp.DownloadFile;
            if (!FTPUserName.IsNullOrEmpty())
                ftpReqFtpRequest.Credentials = new NetworkCredential(FTPUserName, FTPPassword);

            //下载文件
            using (FtpWebResponse fresFtpResponse = (FtpWebResponse)ftpReqFtpRequest.GetResponse())
            {
                using (Stream sFtpStream = fresFtpResponse.GetResponseStream())
                {
                    MemoryStream msLocalStream = new MemoryStream();
                    byte[] arrBuffer = new byte[1024];
                    int nReadBytes = 0;
                    while ((nReadBytes = sFtpStream.Read(arrBuffer, 0, arrBuffer.Length)) != 0)
                    {
                        msLocalStream.Write(arrBuffer, 0, nReadBytes);
                    }

                    return msLocalStream;
                }
            }



可运行项目 : http://download.csdn.net/detail/sgs595595/9409409

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值