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
{