From c00ada5aee77f93db8500e7b01ee7fbee3efc60f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=A9=99=E5=AD=90?= <454313500@qq.com> Date: Sat, 21 Dec 2024 23:00:43 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E5=AE=8C=E6=88=90=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E6=A8=A1=E5=9D=97=E4=BC=98=E5=8C=96=E9=87=8D=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Yi.Framework.Core/Enums/FileTypeEnum.cs | 10 +-- .../Yi.Framework.Core/Helper/MimeHelper.cs | 4 +- .../Entities/FileAggregateRoot.cs | 2 +- .../Managers/FileManager.cs | 64 ++++++++++++++----- .../Yi.Framework.Rbac.Domain.csproj | 3 +- .../YiFrameworkRbacDomainModule.cs | 4 +- 6 files changed, 61 insertions(+), 26 deletions(-) diff --git a/Yi.Abp.Net8/framework/Yi.Framework.Core/Enums/FileTypeEnum.cs b/Yi.Abp.Net8/framework/Yi.Framework.Core/Enums/FileTypeEnum.cs index 1776d35f..193f7909 100644 --- a/Yi.Abp.Net8/framework/Yi.Framework.Core/Enums/FileTypeEnum.cs +++ b/Yi.Abp.Net8/framework/Yi.Framework.Core/Enums/FileTypeEnum.cs @@ -11,10 +11,10 @@ namespace Yi.Framework.Core.Enums /// public enum FileTypeEnum { - File, - Image, - Thumbnail, - Excel, - Temp + file, + image, + thumbnail, + excel, + temp } } diff --git a/Yi.Abp.Net8/framework/Yi.Framework.Core/Helper/MimeHelper.cs b/Yi.Abp.Net8/framework/Yi.Framework.Core/Helper/MimeHelper.cs index d03bf16b..a89d9212 100644 --- a/Yi.Abp.Net8/framework/Yi.Framework.Core/Helper/MimeHelper.cs +++ b/Yi.Abp.Net8/framework/Yi.Framework.Core/Helper/MimeHelper.cs @@ -45,8 +45,8 @@ namespace Yi.Framework.Core.Helper { var extension = Path.GetExtension(fileName); if (ImageType.Contains(extension.ToLower())) - return FileTypeEnum.Image; - return FileTypeEnum.File; + return FileTypeEnum.image; + return FileTypeEnum.file; } diff --git a/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Domain/Entities/FileAggregateRoot.cs b/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Domain/Entities/FileAggregateRoot.cs index 4ef11526..7cb6faf9 100644 --- a/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Domain/Entities/FileAggregateRoot.cs +++ b/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Domain/Entities/FileAggregateRoot.cs @@ -103,7 +103,7 @@ namespace Yi.Framework.Rbac.Domain.Entities /// public string GetAndCheakThumbnailSavePath(bool isCheak=false) { - string thumbnailPath = $"wwwroot/{FileTypeEnum.Thumbnail}"; + string thumbnailPath = $"wwwroot/{FileTypeEnum.thumbnail}"; if (isCheak) { if (!Directory.Exists(thumbnailPath)) diff --git a/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Domain/Managers/FileManager.cs b/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Domain/Managers/FileManager.cs index d6698128..4a39c846 100644 --- a/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Domain/Managers/FileManager.cs +++ b/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Domain/Managers/FileManager.cs @@ -1,8 +1,10 @@ using Mapster; using Microsoft.AspNetCore.Http; +using Microsoft.Extensions.Logging; using Volo.Abp.Domain.Repositories; using Volo.Abp.Domain.Services; using Volo.Abp.Guids; +using Volo.Abp.Imaging; using Yi.Framework.Core.Enums; using Yi.Framework.Core.Helper; using Yi.Framework.Rbac.Domain.Entities; @@ -13,11 +15,14 @@ public class FileManager : DomainService, IFileManager { private IGuidGenerator _guidGenerator; private readonly IRepository _repository; - - public FileManager(IGuidGenerator guidGenerator, IRepository repository) + private readonly IImageCompressor _imageCompressor; + public FileManager(IGuidGenerator guidGenerator, IRepository repository, + + IImageCompressor imageCompressor) { _guidGenerator = guidGenerator; _repository = repository; + _imageCompressor = imageCompressor; } /// @@ -51,7 +56,7 @@ public class FileManager : DomainService, IFileManager /// /// /// - public async Task SaveFileAsync(FileAggregateRoot file,Stream fileStream) + public async Task SaveFileAsync(FileAggregateRoot file, Stream fileStream) { var filePath = file.GetSaveFilePath(); @@ -59,25 +64,52 @@ public class FileManager : DomainService, IFileManager using (var stream = new FileStream(filePath, FileMode.CreateNew, FileAccess.ReadWrite)) { await fileStream.CopyToAsync(stream); + fileStream.Position = 0; + } - //如果是图片类型,还需要生成缩略图 - //这里根据自己需求变更,我们的需求是:原始文件与缩略图文件,都要一份 - var fileType=file.GetFileType();; - //如果文件类型是图片,尝试进行压缩 - if (FileTypeEnum.Image.Equals(fileType)) + + //如果是图片类型,还需要生成缩略图 + //这里根据自己需求变更,我们的需求是:原始文件与缩略图文件,都要一份 + var fileType = file.GetFileType(); + //如果文件类型是图片,尝试进行压缩 + if (FileTypeEnum.image==fileType) + { + var thumbnailSavePath = file.GetAndCheakThumbnailSavePath(true); + Stream compressImageStream=null; + try { - var thumbnailSavePath= file.GetAndCheakThumbnailSavePath(true); - try + //压缩图片 + var compressResult = await _imageCompressor.CompressAsync(fileStream, file.GetMimeMapping()); + if (compressResult.State == ImageProcessState.Done) { - // _imageSharpManager.ImageCompress(f.FileName, f.OpenReadStream(), thumbnailFilePath); + compressImageStream = + (await _imageCompressor.CompressAsync(fileStream, file.GetMimeMapping())).Result; } - catch + else if (compressResult.State == ImageProcessState.Canceled) { - //如果失败了,直接复制一份到缩略图上即可 - var result = new byte[stream.Length]; - await stream.ReadAsync(result, 0, result.Length); - await File.WriteAllBytesAsync(thumbnailSavePath, result); + throw new NotSupportedException($"当前图片无法再进行压缩,文件id:{file.Id}"); } + else + { + throw new NotSupportedException($"当前图片不支持压缩,文件id:{file.Id}"); + } + } + catch (Exception exception) when (exception is NotSupportedException) + { + this.LoggerFactory.CreateLogger().LogInformation(exception, exception.Message); + } + catch (Exception exception) + { + //如果失败了,直接复制一份到缩略图上即可 + compressImageStream = fileStream; + this.LoggerFactory.CreateLogger().LogError(exception, exception.Message); + } + + + using (var stream = new FileStream(thumbnailSavePath, FileMode.CreateNew, FileAccess.ReadWrite)) + { + await compressImageStream.CopyToAsync(stream); + compressImageStream.Position = 0; } } } diff --git a/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Domain/Yi.Framework.Rbac.Domain.csproj b/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Domain/Yi.Framework.Rbac.Domain.csproj index 799e5d95..734dc0a1 100644 --- a/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Domain/Yi.Framework.Rbac.Domain.csproj +++ b/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Domain/Yi.Framework.Rbac.Domain.csproj @@ -16,7 +16,8 @@ - + + diff --git a/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Domain/YiFrameworkRbacDomainModule.cs b/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Domain/YiFrameworkRbacDomainModule.cs index a5568c1e..a5a61d92 100644 --- a/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Domain/YiFrameworkRbacDomainModule.cs +++ b/Yi.Abp.Net8/module/rbac/Yi.Framework.Rbac.Domain/YiFrameworkRbacDomainModule.cs @@ -2,6 +2,7 @@ using Volo.Abp.AspNetCore.SignalR; using Volo.Abp.Caching; using Volo.Abp.Domain; +using Volo.Abp.Imaging; using Volo.Abp.Modularity; using Yi.Framework.Caching.FreeRedis; using Yi.Framework.Mapster; @@ -18,7 +19,8 @@ namespace Yi.Framework.Rbac.Domain typeof(AbpAspNetCoreSignalRModule), typeof(AbpDddDomainModule), - typeof(AbpCachingModule) + typeof(AbpCachingModule), + typeof(AbpImagingImageSharpModule) )] public class YiFrameworkRbacDomainModule : AbpModule {