(SSH.NET) Загрузка в корневой каталог SFTP работает, загрузка в папку, которую я создаю, не - PullRequest
0 голосов
/ 26 октября 2019

Я пытаюсь загрузить кучу файлов на sftp-сервер клиента, используя ssh.net. Эти файлы находятся в определенной структуре каталогов, которые мне нужно скопировать на sftp. Загрузка в корень работает без проблем, загрузка в папку, которую создает загружаемое приложение, создает только 0-байтовые файлы и вылетает, создавая исключение «Клиент не подключен». Папки создаются однако.

Корень в этом случае - это корень, который загружает пользователь, которого он видит.

Мне уже удалось загрузить в общей сложности 24 000 файлов PDF в заданной структуре Справочника. Это просто перестало работать, поэтому я не думаю, что у библиотеки ssh.net есть проблемы с клиентами sftp?

Со времени ее работы в код не было внесено никаких изменений, и мой клиент сказал, что никаких изменений не былос их стороны.

Я попытался загрузить вручную, используя WinSCP и FileZilla, оба работают НЕКОТОРЫЕ. SFTP также иногда недоступен.

это код, используемый для загрузки

private void UploadDirectory(string localPath, string remotePath)
        {
            if (Client.IsConnected)
                Console.WriteLine("I'm connected!");

            Console.WriteLine("Uploading directory {0} to {1}", localPath, remotePath);
            Logger(DateTime.Now.ToString() + " - Uploading directory " + localPath + " to " + remotePath, localPath);
            var infos =
                new DirectoryInfo(localPath).EnumerateFileSystemInfos();
            foreach (var info in infos)
                if (info.Attributes.HasFlag(FileAttributes.Directory))
                {
                    var subPath = "";
                    if (remotePath == @"/")
                    {
                        subPath = remotePath + info.Name;
                    }
                    else
                    {
                        subPath = remotePath + "/" + info.Name;
                    }
                    if (!Client.Exists(subPath)) Client.CreateDirectory(subPath);
                    UploadDirectory(info.FullName, subPath);
                }
                else
                {
                    Client.ChangeDirectory(remotePath);
                    if (Client.Exists(info.Name))
                        Console.WriteLine("Datei exestiert bereits " + info.Name);
                    else
                        using (Stream fileStream = new FileStream(info.FullName, FileMode.Open))
                        {
                            Console.WriteLine(
                                "Uploading {0} ({1:N0} bytes)",
                                info.FullName, ((FileInfo)info).Length);
                            Logger(DateTime.Now.ToString() + " - Uploading " + info.FullName + " (" + ((FileInfo)info).Length + ")", localPath);

                            try
                            {
                                Console.WriteLine("bin im try vor Client.UploadFile");

                                Logger(DateTime.Now.ToString() + " - Trying File Upload - Connection Info:", localPath);
                                Logger(DateTime.Now.ToString() + " - isConnected: " + Client.IsConnected.ToString(), localPath);
                                Logger(DateTime.Now.ToString() + " - User: " + Client.ConnectionInfo.Username.ToString(), localPath);
                                Logger(DateTime.Now.ToString() + " - Port: " + Client.ConnectionInfo.Port.ToString(), localPath);
                                Logger(DateTime.Now.ToString() + " - isAuthenticated: " + Client.ConnectionInfo.IsAuthenticated.ToString(), localPath);

                                Client.UploadFile(fileStream, info.Name);
                                Console.WriteLine("bin nach Client.UploadFile vor ReadLine");
                                //Console.ReadLine();

                            }
                            catch (Exception e)
                            {
                                Console.WriteLine("First try failed: " + info.Name);
                                Console.WriteLine(Client.ConnectionInfo.IsAuthenticated.ToString());
                                fileStream.Close();
                                UploadSingle(info.FullName, info.Name, localPath);
                            }
                        }
                }
        }

Ожидаемый результат: загрузка как в корневой, так и в созданный каталоги должна работать так, как раньше,видя как не было внесено никаких изменений. Фактический результат: загрузка возможна только в корневой каталог, файлы меньшего размера (<10 КБ) могут иногда загружаться в созданные каталоги. SFTP иногда недоступен. </p>

Исключения: Клиент не подключен, несмотря на создание каталога и загрузку файловых файлов или 0-байтовых файлов, которые получают «.in». добавлен префикс (по sftp?)

...