White Whale Studio

[C#/WPF] FTP - Upload Files(파일 업로드) 본문

IT Engineering/.Net (WPF)

[C#/WPF] FTP - Upload Files(파일 업로드)

glorymind 2015. 4. 2. 13:54
반응형

이번 포스팅에서는 FTP 파일 업로드를 살펴볼겁니다.


Using System.Net; 추가해 주시고..


/// <param name="filename">Upload할 파일명</param>

/// <param name="targetFilename">Upload후 FTP서버에 저장될 파일명</param>


public int UpLoadFiles(string filename, string targetFilename)

        {

            try

            {

                totalread = 0;

                FileInfo fi = new FileInfo(filename); // 파일정보를 입력합니다.

                                

                string URI = _server + "/" + targetFilename;

                System.Net.FtpWebRequest ftp = GetRequest(URI);

                ftp.Method = System.Net.WebRequestMethods.Ftp.UploadFile; // 업로드로 설정

                ftp.UseBinary = true;


                ftp.ContentLength = fi.Length;


                const int BufferSize = 4096;

                byte[] content = new byte[BufferSize - 1 + 1];

                int dataRead;


                using (FileStream fs = fi.OpenRead())

                {

                    try

                    {

                        using (Stream rs = ftp.GetRequestStream())

                        {

                            do

                            {

                                dataRead = fs.Read(content, 0, BufferSize);

                                totalread += dataRead;

                                rs.Write(content, 0, dataRead);

                                if (OnProgressCallBack != null)

                                {

                                    OnProgressCallBack(Convert.ToInt32((totalread / fi.Length) * 100)); // 진행상황 확인

                                }

                            } while (!(dataRead < BufferSize));

                            rs.Close();

                        }


                    }

                    catch (System.InvalidOperationException ie)

                    {

                        //Console.WriteLine(ie.Message);

                        OnProgressCallBack(-1);

                    }                    

                    finally

                    {

                        fs.Close();

                    }

                }

                ftp = null;

            }

            catch (Exception ee)

            {

                Console.WriteLine(ee.Message);

                Console.WriteLine("[FTP Upload] {0} - Upload Failed" + filename);

            }


        }


private FtpWebRequest GetRequest(string URI)

        {

            FtpWebRequest result = (FtpWebRequest)FtpWebRequest.Create(URI);

            result.Credentials = new NetworkCredential(_id, _pw);

            result.KeepAlive = false;


            return result;

        }



저도 웃긴게... 실사용한다고 작성했던 코드를 다시 한번 보니 어떤 소스는 GetRequest 함수로 호출하고 어떤 소스는

DownloadFiles 할 때 FtpWebRequest가 포함되에 있고 그렇네요..

방식은 동일하므로 취향에 맞게 사용하시면 될것같습니다.

반응형
Comments