mirror of
https://github.com/jcreek/YouTubeChannelDownloader.git
synced 2026-07-13 19:23:46 +00:00
feat(*): Add StfpService
This commit is contained in:
@@ -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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user