diff --git a/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Application/Services/FileService.cs b/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Application/Services/FileService.cs index 90d6b5ef..7a67e6ae 100644 --- a/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Application/Services/FileService.cs +++ b/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Application/Services/FileService.cs @@ -6,8 +6,10 @@ using System.Threading.Tasks; using Mapster; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Caching.Memory; using Volo.Abp; using Volo.Abp.Application.Services; +using Volo.Abp.Caching; using Volo.Abp.Domain.Repositories; using Volo.Abp.Guids; using Yi.Framework.Core.Enums; @@ -16,6 +18,7 @@ using Yi.Framework.Rbac.Application.Contracts.Dtos.FileManager; using Yi.Framework.Rbac.Application.Contracts.IServices; using Yi.Framework.Rbac.Domain.Entities; using Yi.Framework.Rbac.Domain.Managers; +using Yi.Framework.Rbac.Domain.Shared.Caches; namespace Yi.Framework.Rbac.Application.Services { @@ -23,11 +26,13 @@ namespace Yi.Framework.Rbac.Application.Services { private readonly IRepository _repository; private readonly FileManager _fileManager; + private readonly IMemoryCache _memoryCache; - public FileService(IRepository repository, FileManager fileManager) + public FileService(IRepository repository, FileManager fileManager, IMemoryCache memoryCache) { _repository = repository; _fileManager = fileManager; + _memoryCache = memoryCache; } /// @@ -37,7 +42,14 @@ namespace Yi.Framework.Rbac.Application.Services [Route("file/{code}/{isThumbnail?}")] public async Task Get([FromRoute] Guid code, [FromRoute] bool? isThumbnail) { - var file = await _repository.GetAsync(x => x.Id == code); + var fileCache = await _memoryCache.GetOrCreateAsync($"File:{code}", async (options) => + { + options.AbsoluteExpiration = DateTime.Now.AddDays(1); + var file = await _repository.GetAsync(x => x.Id == code); + if (file == null!) return null; + return file.Adapt(); + }); + var file = fileCache?.Adapt(); var path = file?.GetQueryFileSavePath(isThumbnail); if (path is null || !File.Exists(path)) { @@ -58,12 +70,13 @@ namespace Yi.Framework.Rbac.Application.Services for (int i = 0; i < file.Count; i++) { - var entity= entities[i]; - using (var steam = file[i].OpenReadStream()) - { - await _fileManager.SaveFileAsync(entity,steam); - } + var entity = entities[i]; + using (var steam = file[i].OpenReadStream()) + { + await _fileManager.SaveFileAsync(entity, steam); + } } + return entities.Adapt>(); } } diff --git a/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Domain.Shared/Caches/FileCacheItem.cs b/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Domain.Shared/Caches/FileCacheItem.cs new file mode 100644 index 00000000..a8bfe3ab --- /dev/null +++ b/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Domain.Shared/Caches/FileCacheItem.cs @@ -0,0 +1,29 @@ +namespace Yi.Framework.Rbac.Domain.Shared.Caches; + +public class FileCacheItem +{ + public Guid Id { get; set; } + + /// + /// 文件大小 + /// + public decimal FileSize { get; set; } + + /// + /// 文件名 + /// + public string FileName { get; set; } + + /// + /// 文件路径 + /// + public string FilePath { get; set; } + + public DateTime CreationTime { get; set; } + + public Guid? CreatorId { get; set; } + + public Guid? LastModifierId { get; set; } + + public DateTime? LastModificationTime { get; set; } +} \ No newline at end of file