74 lines
1.5 KiB
C#
74 lines
1.5 KiB
C#
using System.Net;
|
|
using FluentFTP;
|
|
using Nebula.Shared.FileApis.Interfaces;
|
|
|
|
namespace Nebula.Shared.FileApis;
|
|
|
|
public class FtpFileApi : IWriteFileApi, IDisposable
|
|
{
|
|
private readonly string _ftpHost;
|
|
private readonly string _username;
|
|
private readonly string _password;
|
|
|
|
private readonly FtpClient Client;
|
|
|
|
public FtpFileApi(string ftpHost, string username, string password)
|
|
{
|
|
_ftpHost = ftpHost;
|
|
_username = username;
|
|
_password = password;
|
|
Client = CreateClient();
|
|
Client.AutoConnect();
|
|
}
|
|
|
|
public bool Save(string path, Stream input)
|
|
{
|
|
try
|
|
{
|
|
var result = Client.UploadStream(input, path, FtpRemoteExists.Overwrite, true);
|
|
return result == FtpStatus.Success;
|
|
}
|
|
catch
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
|
|
public bool Remove(string path)
|
|
{
|
|
try
|
|
{
|
|
Client.DeleteFile(path);
|
|
return true;
|
|
}
|
|
catch
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
|
|
public bool Has(string path)
|
|
{
|
|
try
|
|
{
|
|
return Client.FileExists(path);
|
|
}
|
|
catch
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
|
|
private FtpClient CreateClient()
|
|
{
|
|
var client = new FtpClient(_ftpHost, _username, _password);
|
|
client.Config.EncryptionMode = FtpEncryptionMode.None;
|
|
client.Config.ValidateAnyCertificate = true;
|
|
return client;
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
Client.Dispose();
|
|
}
|
|
} |