70 lines
2.3 KiB
C#
70 lines
2.3 KiB
C#
using GozareshgirProgramManager.Domain.FileManagementAgg.Enums;
|
|
using Microsoft.AspNetCore.Http;
|
|
|
|
namespace GozareshgirProgramManager.Application.Services.FileManagement;
|
|
|
|
/// <summary>
|
|
/// سرویس آپلود و مدیریت کامل فایل
|
|
/// این سرویس تمام مراحل آپلود، ذخیره، تولید thumbnail و... را انجام میدهد
|
|
/// </summary>
|
|
public interface IFileUploadService
|
|
{
|
|
/// <summary>
|
|
/// آپلود فایل با تمام مراحل پردازش
|
|
/// </summary>
|
|
/// <param name="file">فایل برای آپلود</param>
|
|
/// <param name="category">دستهبندی فایل</param>
|
|
/// <param name="uploadedByUserId">شناسه کاربر آپلودکننده</param>
|
|
/// <param name="maxFileSizeBytes">حداکثر حجم مجاز فایل (پیشفرض: 100MB)</param>
|
|
/// <returns>شناسه فایل آپلود شده یا null در صورت خطا</returns>
|
|
Task<FileUploadResult> UploadFileAsync(
|
|
IFormFile file,
|
|
FileCategory category,
|
|
long uploadedByUserId,
|
|
long maxFileSizeBytes = 100 * 1024 * 1024);
|
|
|
|
/// <summary>
|
|
/// آپلود فایل با Stream
|
|
/// </summary>
|
|
Task<FileUploadResult> UploadFileFromStreamAsync(
|
|
Stream fileStream,
|
|
string fileName,
|
|
string contentType,
|
|
FileCategory category,
|
|
long uploadedByUserId,
|
|
long maxFileSizeBytes = 100 * 1024 * 1024);
|
|
}
|
|
|
|
/// <summary>
|
|
/// نتیجه عملیات آپلود فایل
|
|
/// </summary>
|
|
public class FileUploadResult
|
|
{
|
|
public bool IsSuccess { get; set; }
|
|
public Guid? FileId { get; set; }
|
|
public string? ErrorMessage { get; set; }
|
|
public string? StorageUrl { get; set; }
|
|
public string? ThumbnailUrl { get; set; }
|
|
|
|
public static FileUploadResult Success(Guid fileId, string storageUrl, string? thumbnailUrl = null)
|
|
{
|
|
return new FileUploadResult
|
|
{
|
|
IsSuccess = true,
|
|
FileId = fileId,
|
|
StorageUrl = storageUrl,
|
|
ThumbnailUrl = thumbnailUrl
|
|
};
|
|
}
|
|
|
|
public static FileUploadResult Failed(string errorMessage)
|
|
{
|
|
return new FileUploadResult
|
|
{
|
|
IsSuccess = false,
|
|
ErrorMessage = errorMessage
|
|
};
|
|
}
|
|
}
|
|
|