private void EndGetResponseCallback(IAsyncResult ar)
        {
            FtpState       state    = (FtpState)ar.AsyncState;
            FtpWebResponse response = null;

            try
            {
                response = (FtpWebResponse)state.Request.EndGetResponse(ar);
                response.Close();
                state.StatusDescription = response.StatusDescription;
                state.OperationComplete.Set();
            }
            catch (Exception e)
            {
                state.OperationException = e;
                state.OperationComplete.Set();
            }
        }
        public CommonResultModel NewFileUpload(string fname)
        {
            ManualResetEvent waitObject;
            FtpState         state   = new FtpState();
            FtpWebRequest    request = (FtpWebRequest)WebRequest.Create(_url + @"/" + fname);

            request.UseBinary   = true;
            request.Method      = WebRequestMethods.Ftp.UploadFile;
            request.Credentials = new NetworkCredential(_username, _password);
            string status = string.Empty;

            //byte[] b = File.ReadAllBytes(_filePath);

            state.Request  = request;
            state.FileName = fname;

            waitObject = state.OperationComplete;

            request.BeginGetRequestStream(
                new AsyncCallback(EndGetStreamCallback), state

                );

            waitObject.WaitOne(new TimeSpan(0, 40, 0));

            if (state.OperationException != null)
            {
                throw state.OperationException;
            }
            else
            {
                //Console.WriteLine("The operation completed - {0}", state.StatusDescription);
            }



            return(new CommonResultModel
            {
                IsOK = true,
                Message = string.Format("Upload File Complete, status {0}", status),
            });
        }
        private void EndGetStreamCallback(IAsyncResult ar)
        {
            FtpState state = (FtpState)ar.AsyncState;

            Stream requestStream = null;

            try
            {
                requestStream = state.Request.EndGetRequestStream(ar);
                const int bufferLength = 2048;
                byte[]    buffer       = new byte[bufferLength];
                int       count        = 0;
                int       readBytes    = 0;

                FileStream stream = File.OpenRead(this._filePath);
                do
                {
                    readBytes = stream.Read(buffer, 0, bufferLength);
                    requestStream.Write(buffer, 0, readBytes);
                    count += readBytes;
                }while (readBytes != 0);
                //Console.WriteLine("Writing {0} bytes to the stream.", count);
                requestStream.Close();
                stream.Close();
                state.Request.BeginGetResponse(
                    new AsyncCallback(EndGetResponseCallback),
                    state
                    );
            }
            catch (Exception e)
            {
                //Console.WriteLine("Could not get the request stream.");
                state.OperationException = e;
                state.OperationComplete.Set();
                return;
            }
        }