Browse Source

feat(oss): 分片上传文件合并前检查文件是否存在

pull/1192/head
colin 9 months ago
parent
commit
558b3c38d5
  1. 1
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/GetOssObjectInput.cs
  2. 28
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/ValidationOssObjectInput.cs
  3. 21
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/FileUploadMerger.cs
  4. 14
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/FileUploader.cs

1
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; }
}

28
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
{
/// <summary>
/// 总文件大小
/// </summary>
[Required]
public long TotalSize { get; set; }
/// <summary>
/// 文件名
/// </summary>
[Required]
public string FileName { get; set; }
/// <summary>
/// 容器
/// </summary>
[Required]
public string Bucket { get; set; }
/// <summary>
/// 路径
/// </summary>
public string Path { get; set; }
public bool Overwrite { get; set; }
}

21
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();

14
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(),

Loading…
Cancel
Save