C # FTP загрузка зависла на конкретном файле - PullRequest
0 голосов
/ 26 октября 2018

У меня проблема с моей программой на C #. У меня есть большой zip-архив (около 4 Гб), который разбит на маленькие кусочки, фактически каждый кусок составляет 100 Мб. Итак, когда моя программа начинает загружать файлы, она работает отлично, пока не загрузится 14-ая часть. моя программа загружает только ~ 90 Мб этого куска, а затем я получаю сообщение об ошибке «Удаленный сервер возвратил ошибку: (451) Локальная ошибка в обработке». Моя программа на C # определяет, был ли файл загружен успешно, и пытается загрузить его, поэтому я получил бесконечный цикл

private static void SendToFtp(AppConfig cfg, string zipName)
{
    Console.WriteLine("Starting FTP upload");
    NetworkCredential creds = new NetworkCredential(cfg.FtpUserName, cfg.FtpPassword);
   try
   {
    StringBuilder sb = new StringBuilder();
    DirectoryInfo di = new DirectoryInfo(cfg.ZipFolder);
    byte[] buffer = null;
    foreach (var file in di.EnumerateFiles())
    {
        using (Stream st = File.OpenRead(file.FullName))
        using (BinaryReader br = new BinaryReader(st))
        {

            bool success = false;
            while (!success)
            {
                br.BaseStream.Seek(0, SeekOrigin.Begin);
                buffer = br.ReadBytes((int)file.Length);

                sb.Append($"ftp://{cfg.FtpHost}/{file.Name}");
                request = (FtpWebRequest)WebRequest.Create(sb.ToString());
                request.Method = WebRequestMethods.Ftp.UploadFile;
                request.UseBinary = false;
                request.UsePassive = false;
                request.KeepAlive = false;
                request.ServicePoint.ConnectionLimit = 1000;
                request.Credentials = new NetworkCredential(cfg.FtpUserName, cfg.FtpPassword);

                using (Stream requestStream = request.GetRequestStream())
                {
                    try
                    {
                        requestStream.Write(buffer, 0, buffer.Length);
                        requestStream.Flush();
                        requestStream.Close();

                        var resp = (FtpWebResponse)request.GetResponse();
                        success = !success;
                        Console.WriteLine($"======================{file.Name}=======================");
                        Console.WriteLine($"Message:{resp.StatusDescription}");
                        Console.WriteLine($" Status code: {resp.StatusCode}");
                        Console.WriteLine($"========================================================");
                    }
                    catch (Exception ex)
                    {
                        request.Abort();
                        Console.WriteLine($"MSG: {ex.Message}");

                    }
                }
                sb.Clear();
            }
        }

    }
    Console.WriteLine("FTP upload finished");
    }
    catch (Exception ex)
    {
         Console.WriteLine($"{ex.Message}; {ex.Source}");
    }

}

Итак, кто-то может мне помочь или указать мне, где я неправ. Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...