Files
adas-core/adas-core.Application/Services/FileService.cs
T

113 lines
3.6 KiB
C#

//using Microsoft.AspNetCore.Http;
using adas_core.Application.Services.Interfaces;
using adas_core.Domain.Enums;
using adas_core.Domain.Models.AppSettings;
using adas_core.Domain.Models.DTO;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
using Serilog;
namespace adas_core.Application.Services;
public class FileService : IFileService
{
private readonly string? _assetsDirectory;
private readonly ILogger<FileService> _logger;
private readonly string? _updateDirectory;
public FileService(
IOptions<ApiSettings> apiSettings,
ILogger<FileService> logger
)
{
_logger = logger;
if (apiSettings.Value.PathUpdateFiles != null)
_updateDirectory = Path.Combine(apiSettings.Value.PathUpdateFiles);
if (apiSettings.Value.PathToDisplayAssets != null)
_assetsDirectory = Path.Combine(apiSettings.Value.PathToDisplayAssets);
}
public async Task<bool> CopyUpdateFiles(ICollection<IFormFile> files)
{
if (string.IsNullOrWhiteSpace(_updateDirectory)) return false;
foreach (var file in files)
{
await using var stream = new FileStream(Path.Combine(_updateDirectory, file.FileName), FileMode.Create);
await file.CopyToAsync(stream);
}
return true;
}
public async Task<bool> UploadAssetFiles(ICollection<IFormFile> files, FileEnum.AssetTheme themeParse)
{
if (string.IsNullOrWhiteSpace(_assetsDirectory)) return false;
var directoryInfo = new DirectoryInfo(Path.Combine(_assetsDirectory, themeParse.ToString()));
if (!directoryInfo.Exists) directoryInfo.Create();
foreach (var file in files)
{
await using var stream =
new FileStream(Path.Combine(_assetsDirectory, themeParse.ToString(), file.FileName), FileMode.Create);
await file.CopyToAsync(stream);
}
return true;
}
public List<AssetDto> GetAllAssetFile(FileEnum.AssetTheme themeParse)
{
try
{
if (string.IsNullOrWhiteSpace(_assetsDirectory)) return [];
var listToReturn = new List<AssetDto>();
var directoryInfo = new DirectoryInfo(Path.Combine(_assetsDirectory, themeParse.ToString()));
if (!directoryInfo.Exists) directoryInfo.Create();
var files = directoryInfo.GetFiles(); // Obtener todos los archivos en el directorio
foreach (var file in files)
{
var assetDto = new AssetDto
{
Name = file.Name,
Extension = file.Extension,
Path = file.FullName // Obtener la ruta completa del archivo
};
listToReturn.Add(assetDto);
}
return listToReturn;
}
catch (Exception e)
{
_logger.LogError("Error while retrieving assets: {eMessage} {eStackTrace}", e.Message, e.StackTrace);
return [];
}
}
public List<string> GetFilesInDirectory(string directoryPath)
{
List<string> fileList = [];
try
{
if (Directory.Exists(directoryPath))
// Obtiene todos los archivos en el directorio
fileList.AddRange(Directory.GetFiles(directoryPath));
else
Log.Warning("La ruta proporcionada no existe: {directoryPath}", directoryPath);
}
catch (Exception ex)
{
Log.Error("Ocurrió un error al buscar archivos: {exMessage}", ex.Message);
}
return fileList;
}
}