Exemplo n.º 1
0
        public void Start()
        {
            string folderName = "";

            lock (FtpWorker.FileQueue)
            {
                folderName = MakeDir();
            }


            BackupFileInfo fi = null;

            while (true)
            {
                fi = FtpWorker.FileQueue.Dequeue();
                if (StartUpload != null)
                {
                    StartUpload(Id, (int)(fi.File.Length / (1024)));
                }
                CurrentFileWorkingSize = 0;
                UploadFile(fi, this.StoragePath, folderName);
                // lock (FtpWorker.FileQueue)
                // {
                if (FtpWorker.FileQueue.Count == 0)
                {
                    break;
                }
                //  }
            }
        }
Exemplo n.º 2
0
        private bool UploadFile(BackupFileInfo file, string rootPath, string folderName)
        {
            FileStream fileStream = File.OpenRead(file.File.FullName);
            string     uri        = string.Format("{3}/{2}/{0}-{1}",
                                                  file.File.CreationTime.ToString("yyyyMMddhhmmssfff"), BitConverter.ToString(Encoding.UTF8.GetBytes(file.File.Name), 0).Replace("-", "")
                                                  + file.File.Extension, folderName, this.RemoteFolder);
            Stream s = null;

            try
            {
                Request = (FtpWebRequest)FtpWebRequest.Create(uri);
                if (User != null && Pwd != null)
                {
                    Request.Credentials = new NetworkCredential(User, Pwd);
                }

                Request.Method           = WebRequestMethods.Ftp.UploadFile;
                Request.UseBinary        = true;
                Request.Timeout          = 5000;
                Request.ReadWriteTimeout = 5000;
                Request.ContentLength    = fileStream.Length;


                s = Request.GetRequestStream();
                byte[] buffer   = new byte[1024 * 1024 * 1];
                int    realRead = 0;
                while ((realRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
                {
                    s.Write(buffer, 0, realRead);
                    CurrentFileWorkingSize += realRead;
                    if (SingleProgressUpdate != null)
                    {
                        SingleProgressUpdate(Id, CurrentFileWorkingSize / 1024);
                    }
                    if (ProgressUpdate != null)
                    {
                        ProgressUpdate(realRead);
                    }
                }
                s.Close();
                Request.GetResponse().Dispose();
                if (this.Uploaded != null)
                {
                    this.Uploaded(file.File.Name);
                }
                if (this.DeleteByBackup)
                {
                    file.File.Delete();
                    if (this.LocalFileDeleted != null)
                    {
                        this.LocalFileDeleted(file.File.Name);
                    }
                }
                return(true);
            }
            catch (Exception e)
            {
                if (file.RetryCount == 5)
                {
                    if (this.UploadFailed != null)
                    {
                        this.UploadFailed(file.File.Name, e.Message);
                    }
                }
                else
                {
                    FtpWorker.FileQueue.Enqueue(file);
                }
                return(false);
            }
            finally
            {
                fileStream.Dispose();
            }
        }