From 558b3c38d51c888cf09928c9cca42c69204b4014 Mon Sep 17 00:00:00 2001 From: colin Date: Mon, 28 Apr 2025 20:13:10 +0800 Subject: [PATCH] =?UTF-8?q?feat(oss):=20=E5=88=86=E7=89=87=E4=B8=8A?= =?UTF-8?q?=E4=BC=A0=E6=96=87=E4=BB=B6=E5=90=88=E5=B9=B6=E5=89=8D=E6=A3=80?= =?UTF-8?q?=E6=9F=A5=E6=96=87=E4=BB=B6=E6=98=AF=E5=90=A6=E5=AD=98=E5=9C=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Abp/OssManagement/GetOssObjectInput.cs | 1 + .../OssManagement/ValidationOssObjectInput.cs | 28 +++++++++++++++++++ .../Abp/OssManagement/FileUploadMerger.cs | 21 +++++++++++++- .../LINGYUN/Abp/OssManagement/FileUploader.cs | 14 ++++++---- 4 files changed, 57 insertions(+), 7 deletions(-) create mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/ValidationOssObjectInput.cs diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/GetOssObjectInput.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/GetOssObjectInput.cs index ff3ccbafa..f9c92ebbf 100644 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/GetOssObjectInput.cs +++ b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/GetOssObjectInput.cs @@ -11,5 +11,6 @@ public class GetOssObjectInput [Required] public string Object { get; set; } + public bool MD5 { get; set; } } diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/ValidationOssObjectInput.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/ValidationOssObjectInput.cs new file mode 100644 index 000000000..235bc2841 --- /dev/null +++ b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/ValidationOssObjectInput.cs @@ -0,0 +1,28 @@ +using System.ComponentModel.DataAnnotations; + +namespace LINGYUN.Abp.OssManagement; + +public class ValidationOssObjectInput +{ + /// + /// 总文件大小 + /// + [Required] + public long TotalSize { get; set; } + /// + /// 文件名 + /// + [Required] + public string FileName { get; set; } + /// + /// 容器 + /// + [Required] + public string Bucket { get; set; } + /// + /// 路径 + /// + public string Path { get; set; } + + public bool Overwrite { get; set; } +} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/FileUploadMerger.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/FileUploadMerger.cs index ec0aff509..fdefe79a5 100644 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/FileUploadMerger.cs +++ b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/FileUploadMerger.cs @@ -4,8 +4,8 @@ using LINGYUN.Abp.OssManagement.Localization; using Microsoft.Extensions.Localization; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; -using System.IO; using System.Threading.Tasks; +using Volo.Abp; using Volo.Abp.DependencyInjection; using Volo.Abp.Features; using Volo.Abp.Validation; @@ -65,6 +65,25 @@ public class FileUploadMerger : ITransientDependency return await oss.CreateObjectAsync(createOssObjectRequest); } + public async virtual Task ValidationAsync(ValidationOssObjectInput input) + { + await _fileValidater.ValidationAsync(new UploadFile + { + TotalSize = input.TotalSize, + FileName = input.FileName + }); + + var oss = CreateOssContainer(); + + if (!input.Overwrite && await oss.ObjectExistsAsync(new GetOssObjectRequest( + input.Bucket, + input.FileName, + input.Path))) + { + throw new BusinessException(OssManagementErrorCodes.ObjectAlreadyExists); + } + } + protected virtual IOssContainer CreateOssContainer() { return _ossContainerFactory.Create(); diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/FileUploader.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/FileUploader.cs index 442f81690..93af01a04 100644 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/FileUploader.cs +++ b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/FileUploader.cs @@ -10,20 +10,22 @@ namespace LINGYUN.Abp.OssManagement; public class FileUploader : IFileUploader, ITransientDependency { - private readonly IFileValidater _fileValidater; private readonly FileUploadMerger _fileUploadMerger; - public FileUploader( - IFileValidater fileValidater, - FileUploadMerger fileUploadMerger) + public FileUploader(FileUploadMerger fileUploadMerger) { - _fileValidater = fileValidater; _fileUploadMerger = fileUploadMerger; } public async virtual Task UploadAsync(UploadFileChunkInput input, CancellationToken cancellationToken = default) { - await _fileValidater.ValidationAsync(input); + await _fileUploadMerger.ValidationAsync(new ValidationOssObjectInput + { + TotalSize = input.TotalSize, + FileName = input.FileName, + Bucket = input.Bucket, + Path = input.Path, + }); // 以上传的文件名创建一个临时目录 var tempFilePath = Path.Combine( Path.GetTempPath(),