C# FileStream進行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: 上傳服務的密碼。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM