feat(*): Add StfpService

This commit is contained in:
Josh Creek
2021-08-29 15:44:47 +01:00
parent 6e99d19fe4
commit ea15038594
@@ -0,0 +1,106 @@
using Microsoft.Extensions.Logging;
using Renci.SshNet;
using Renci.SshNet.Sftp;
using System;
using System.Collections.Generic;
using System.IO;
using YouTubeChannelDownloader.Models;
namespace YouTubeChannelDownloader.Services
{
public class SftpService
{
private readonly ILogger<SftpService> _logger;
private readonly SftpConfig _config;
public SftpService(ILogger<SftpService> logger, SftpConfig sftpConfig)
{
// TODO - actually implement the ILogger in the console application to pass into this class
_logger = logger;
_config = sftpConfig;
}
public IEnumerable<SftpFile> ListAllFiles(string remoteDirectory = ".")
{
using var client = new SftpClient(_config.Host, _config.Port == 0 ? 22 : _config.Port, _config.UserName, _config.Password);
try
{
client.Connect();
return client.ListDirectory(remoteDirectory);
}
catch (Exception exception)
{
_logger.LogError(exception, $"Failed in listing files under [{remoteDirectory}]");
return null;
}
finally
{
client.Disconnect();
}
}
public void UploadFile(string localFilePath, string remoteDirectory, string fileName)
{
using var client = new SftpClient(_config.Host, _config.Port == 0 ? 22 : _config.Port, _config.UserName, _config.Password);
try
{
client.Connect();
client.ChangeDirectory(remoteDirectory);
using (var uplfileStream = File.OpenRead(localFilePath))
{
client.UploadFile(uplfileStream, fileName, true);
}
//_logger.LogInformation($"Finished uploading file [{localFilePath}] to [{remoteDirectory}]");
}
catch (Exception exception)
{
//_logger.LogError(exception, $"Failed in uploading file [{localFilePath}] to [{remoteDirectory}]");
}
finally
{
client.Disconnect();
}
}
public void DownloadFile(string remoteFilePath, string localFilePath)
{
using var client = new SftpClient(_config.Host, _config.Port == 0 ? 22 : _config.Port, _config.UserName, _config.Password);
try
{
client.Connect();
using var s = File.Create(localFilePath);
client.DownloadFile(remoteFilePath, s);
_logger.LogInformation($"Finished downloading file [{localFilePath}] from [{remoteFilePath}]");
}
catch (Exception exception)
{
_logger.LogError(exception, $"Failed in downloading file [{localFilePath}] from [{remoteFilePath}]");
}
finally
{
client.Disconnect();
}
}
public void DeleteFile(string remoteFilePath)
{
using var client = new SftpClient(_config.Host, _config.Port == 0 ? 22 : _config.Port, _config.UserName, _config.Password);
try
{
client.Connect();
client.DeleteFile(remoteFilePath);
_logger.LogInformation($"File [{remoteFilePath}] deleted.");
}
catch (Exception exception)
{
_logger.LogError(exception, $"Failed in deleting file [{remoteFilePath}]");
}
finally
{
client.Disconnect();
}
}
}
}