2024-09-03 16:29:51 +02:00
|
|
|
using Minio;
|
|
|
|
using Minio.DataModel.Args;
|
|
|
|
using Minio.Exceptions;
|
|
|
|
|
|
|
|
namespace Foxnouns.Backend.Services;
|
|
|
|
|
2024-09-09 14:50:00 +02:00
|
|
|
public class ObjectStorageService(ILogger logger, Config config, IMinioClient minioClient)
|
2024-09-03 16:29:51 +02:00
|
|
|
{
|
|
|
|
private readonly ILogger _logger = logger.ForContext<ObjectStorageService>();
|
2024-09-04 14:25:44 +02:00
|
|
|
|
2024-09-09 14:37:59 +02:00
|
|
|
public async Task RemoveObjectAsync(string path, CancellationToken ct = default)
|
2024-09-03 16:29:51 +02:00
|
|
|
{
|
2024-09-04 14:25:44 +02:00
|
|
|
_logger.Debug("Deleting object at path {Path}", path);
|
2024-09-03 16:29:51 +02:00
|
|
|
try
|
|
|
|
{
|
2024-09-09 14:50:00 +02:00
|
|
|
await minioClient.RemoveObjectAsync(
|
|
|
|
new RemoveObjectArgs().WithBucket(config.Storage.Bucket).WithObject(path),
|
2024-09-09 14:37:59 +02:00
|
|
|
ct);
|
2024-09-03 16:29:51 +02:00
|
|
|
}
|
|
|
|
catch (InvalidObjectNameException)
|
|
|
|
{
|
2024-09-04 14:25:44 +02:00
|
|
|
// ignore non-existent objects
|
2024-09-03 16:29:51 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-09-09 14:37:59 +02:00
|
|
|
public async Task PutObjectAsync(string path, Stream data, string contentType, CancellationToken ct = default)
|
2024-09-03 16:29:51 +02:00
|
|
|
{
|
2024-09-04 14:25:44 +02:00
|
|
|
_logger.Debug("Putting object at path {Path} with length {Length} and content type {ContentType}", path,
|
|
|
|
data.Length, contentType);
|
|
|
|
|
2024-09-09 14:50:00 +02:00
|
|
|
await minioClient.PutObjectAsync(new PutObjectArgs()
|
2024-09-09 14:37:59 +02:00
|
|
|
.WithBucket(config.Storage.Bucket)
|
|
|
|
.WithObject(path)
|
|
|
|
.WithObjectSize(data.Length)
|
|
|
|
.WithStreamData(data)
|
|
|
|
.WithContentType(contentType), ct
|
2024-09-03 16:29:51 +02:00
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|