Я пытаюсь загрузить кучу файлов на 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?)