FTP上传及下载

定义FileStream类的操作类:操作类名: FtpUpDown

上传文件

/// <summary>
 
        /// 上传文件
 
        /// </summary>
 
        /// <param name="localpath">上传文件的全路径 例@"D:\123.txt"</param>
 
        /// <param name="ftppath"></param>
 
        /// <returns></returns>
 
        public bool Upload(string localpath, string ftppath)
 
        {
 
            bool bol = false;
 
            try
 
            {
 
                FileInfo fileInf = new FileInfo(localpath);
 
                //替换符号
 
                ftppath = ftppath.Replace("\\", "/");
 
                //组合ftp上传文件路径
 
                string uri = "ftp://" + ftppath + "/" + fileInf.Name;
 
 
 
                // 根据uri创建FtpWebRequest对象
 
                reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(uri));
 
                // 指定数据传输类型
 
                reqFTP.UseBinary = true;
 
                // ftp用户名和密码
 
                reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
 
                // 默认为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);
 
                        bol = true;
 
                    }
 
                    // 关闭两个流
 
                    strm.Close();
 
                    fs.Close();
 
                }
 
                catch (Exception ex)
 
                {
 
                    MessageBox.Show("上传文件失败,失败原因;" + ex.Message);
 
                }
 
            }
 
            catch (Exception ex)
 
            {
 
                MessageBox.Show("上传文件失败,失败原因;" + ex.Message);
 
            }
 
            return bol;
 
        }
 
 
 
 
 
下载文件:
 
/// <summary>
 
        /// 下载文件
 
        /// </summary>
 
        /// <param name="localpath"></param>
 
        /// <param name="fileName"></param>
 
        /// <param name="errorinfo"></param>
 
        /// <returns></returns>
 
        public bool Download(string localpath, string fileName, out string errorinfo)
 
        {
 
            try
 
            {
 
                String onlyFileName = Path.GetFileName(fileName);
 
                string newFileName = localpath + "\\" + onlyFileName;
 
 
 
                if (File.Exists(newFileName))
 
                {
 
                    errorinfo = string.Format("本地文件{0}已存在,无法下载", newFileName);
 
                    return false;
 
                }
 
                string url = "ftp://" + ftpServerIP + "/FileInfo/" + fileName;
 
                // 根据uri创建FtpWebRequest对象
 
                reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(url));
 
                // 指定数据传输类型
 
                reqFTP.UseBinary = true;
 
                // ftp用户名和密码
 
                reqFTP.Credentials = new NetworkCredential(ftpUserID, ftpPassword);
 
                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);
 
 
 
                FileStream outputStream = new FileStream(newFileName, FileMode.Create, FileAccess.Write);
 
                while (readCount > 0)
 
                {
 
                    outputStream.Write(buffer, 0, readCount);
 
                    readCount = ftpStream.Read(buffer, 0, bufferSize);
 
                }
 
                ftpStream.Close();
 
                outputStream.Close();
 
                response.Close();
 
                errorinfo = "";
 
                return true;
 
            }
 
            catch (Exception ex)
 
            {
 
                errorinfo = string.Format("因{0},无法下载", ex.Message);
 
                return false;
 
            }
 
        }
 
 
 
 
 
调用方法:
 
/// <summary>
 
        /// 上传
 
        /// </summary>
 
        /// <param name="sender"></param>
 
        /// <param name="e"></param>
 
        private void Button_Click_1(object sender, RoutedEventArgs e)
 
        {
 
            FtpUpDown ftp = new FtpUpDown(ftpServerIP, ftpUserID, ftpPassword);
 
            string localpath = @"D:\123.txt";
 
            string ftppath =  ftpServerIP + @"\FileInfo";
 
            bool bol = ftp.Upload(localpath, ftppath);
 
            if (bol == true)
 
                MessageBox.Show("上传成功");
 
            else
 
                MessageBox.Show("上传失败");
 
        }
 
 
 
        /// <summary>
 
        /// 下载
 
        /// </summary>
 
        /// <param name="sender"></param>
 
        /// <param name="e"></param>
 
        private void Button_Click_2(object sender, RoutedEventArgs e)
 
        {
 
            string errorinfo;
 
            string localpath = @"E:\qzq\FileInfo";
 
 
 
            if (!Directory.Exists(localpath))
 
            {
 
                Directory.CreateDirectory(localpath);
 
            }
 
            string filename = "123.txt";
 
            if (!File.Exists(localpath + "\\" + filename))
 
            {
 
 
 
                FtpUpDown ftp = new FtpUpDown(ftpServerIP, ftpUserID, ftpPassword);
 
                bool bol = ftp.Download(localpath, filename, out errorinfo);
 
                if (bol == true)
 
                    MessageBox.Show("下载成功");
 
                else
 
                    MessageBox.Show("下载失败:" + errorinfo + "");
 
            }
 
            else
 
            {
 
                MessageBox.Show("下载文件已存在!");
 
            }
 
        }

其中: ftpServerIP:上传服务的IP地址。

      ftpUserID: 上传服务的登录名。

ftpPassword: 上传服务的密码

posted @ 2018-12-21 17:35  逍遥汉21  阅读(165)  评论(0编辑  收藏  举报