Добавьте файлы проекта.

This commit is contained in:
Курнат Андрей
2026-03-13 21:01:04 +03:00
commit b460f17029
111 changed files with 5803 additions and 0 deletions

View File

@@ -0,0 +1,53 @@
using Massenger.Server.Data.Entities;
namespace Massenger.Server.Infrastructure.Storage;
public sealed class AttachmentStorageService(IWebHostEnvironment environment)
{
private readonly string _rootPath = Path.Combine(environment.ContentRootPath, "Data", "Attachments");
public async Task<MessageAttachment> SaveAsync(Guid messageId, IFormFile file, CancellationToken cancellationToken)
{
if (file.Length <= 0)
{
throw new InvalidOperationException("Attachment is empty.");
}
Directory.CreateDirectory(_rootPath);
var attachmentId = Guid.NewGuid();
var extension = Path.GetExtension(file.FileName);
var year = DateTime.UtcNow.ToString("yyyy");
var month = DateTime.UtcNow.ToString("MM");
var targetDirectory = Path.Combine(_rootPath, year, month);
Directory.CreateDirectory(targetDirectory);
var storedFileName = $"{attachmentId:N}{extension}";
var physicalPath = Path.Combine(targetDirectory, storedFileName);
await using (var source = file.OpenReadStream())
await using (var target = File.Create(physicalPath))
{
await source.CopyToAsync(target, cancellationToken);
}
return new MessageAttachment
{
Id = attachmentId,
MessageId = messageId,
OriginalFileName = string.IsNullOrWhiteSpace(file.FileName) ? "attachment" : Path.GetFileName(file.FileName),
ContentType = string.IsNullOrWhiteSpace(file.ContentType) ? "application/octet-stream" : file.ContentType,
FileSizeBytes = file.Length,
StoragePath = physicalPath,
UploadedAt = DateTimeOffset.UtcNow
};
}
public void DeleteIfExists(string? physicalPath)
{
if (!string.IsNullOrWhiteSpace(physicalPath) && File.Exists(physicalPath))
{
File.Delete(physicalPath);
}
}
}