Browse Source

feat(oss): 增加oss存储是否存在接口

pull/1192/head
colin 11 months ago
parent
commit
423c881fd6
  1. 13
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Aliyun/LINGYUN/Abp/OssManagement/Aliyun/AliyunOssContainer.cs
  2. 6
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/IOssContainer.cs
  3. 2
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/OssContainerBase.cs
  4. 16
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem/LINGYUN/Abp/OssManagement/FileSystem/FileSystemOssContainer.cs
  5. 46
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi/LINGYUN/Abp/OssManagement/OssObjectController.cs
  6. 14
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Minio/LINGYUN/Abp/OssManagement/Minio/MinioOssContainer.cs
  7. 16
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Nexus/LINGYUN/Abp/OssManagement/Nexus/NexusOssContainer.cs
  8. 13
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Tencent/LINGYUN/Abp/OssManagement/Tencent/TencentOssContainer.cs

13
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Aliyun/LINGYUN/Abp/OssManagement/Aliyun/AliyunOssContainer.cs

@ -62,6 +62,19 @@ internal class AliyunOssContainer : OssContainerBase, IOssObjectExpireor
}); });
} }
public async override Task<bool> ObjectExistsAsync(GetOssObjectRequest request)
{
var ossClient = await CreateClientAsync();
var objectPath = GetBasePath(request.Path);
var objectName = objectPath.IsNullOrWhiteSpace()
? request.Object
: objectPath + request.Object;
return ObjectExists(ossClient, request.Bucket, objectName);
}
public async override Task<OssObject> CreateObjectAsync(CreateOssObjectRequest request) public async override Task<OssObject> CreateObjectAsync(CreateOssObjectRequest request)
{ {
var ossClient = await CreateClientAsync(); var ossClient = await CreateClientAsync();

6
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/IOssContainer.cs

@ -60,6 +60,12 @@ public interface IOssContainer
/// <returns></returns> /// <returns></returns>
Task<bool> ExistsAsync(string name); Task<bool> ExistsAsync(string name);
/// <summary> /// <summary>
/// Oss对象是否存在
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
Task<bool> ObjectExistsAsync(GetOssObjectRequest request);
/// <summary>
/// 获取容器列表 /// 获取容器列表
/// </summary> /// </summary>
/// <param name="request"></param> /// <param name="request"></param>

2
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/OssContainerBase.cs

@ -65,4 +65,6 @@ public abstract class OssContainerBase : IOssContainer
{ {
return true; return true;
} }
public abstract Task<bool> ObjectExistsAsync(GetOssObjectRequest request);
} }

16
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem/LINGYUN/Abp/OssManagement/FileSystem/FileSystemOssContainer.cs

@ -122,6 +122,22 @@ internal class FileSystemOssContainer : OssContainerBase, IOssObjectExpireor
return Task.CompletedTask; return Task.CompletedTask;
} }
public override Task<bool> ObjectExistsAsync(GetOssObjectRequest request)
{
var objectPath = !request.Path.IsNullOrWhiteSpace()
? request.Path.EnsureEndsWith('/')
: "";
var objectName = objectPath.IsNullOrWhiteSpace()
? request.Object
: objectPath + request.Object;
var filePath = CalculateFilePath(request.Bucket, objectName);
var objectExists = File.Exists(filePath) || Directory.Exists(filePath);
return Task.FromResult(objectExists);
}
public async override Task<OssObject> CreateObjectAsync(CreateOssObjectRequest request) public async override Task<OssObject> CreateObjectAsync(CreateOssObjectRequest request)
{ {
var objectPath = !request.Path.IsNullOrWhiteSpace() var objectPath = !request.Path.IsNullOrWhiteSpace()

46
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi/LINGYUN/Abp/OssManagement/OssObjectController.cs

@ -1,6 +1,7 @@
using LINGYUN.Abp.OssManagement.Permissions; using LINGYUN.Abp.OssManagement.Permissions;
using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using System;
using System.Threading.Tasks; using System.Threading.Tasks;
using Volo.Abp; using Volo.Abp;
using Volo.Abp.AspNetCore.Mvc; using Volo.Abp.AspNetCore.Mvc;
@ -26,43 +27,64 @@ public class OssObjectController : AbpControllerBase, IOssObjectAppService
} }
[HttpPost] [HttpPost]
public async virtual Task<OssObjectDto> CreateAsync([FromForm] CreateOssObjectInput input) [Authorize(AbpOssManagementPermissions.OssObject.Create)]
public virtual Task<OssObjectDto> CreateAsync([FromForm] CreateOssObjectInput input)
{ {
return await OssObjectAppService.CreateAsync(input); return OssObjectAppService.CreateAsync(input);
} }
[HttpPost] [HttpPost]
[Route("upload")] [Route("upload")]
[DisableAuditing] [DisableAuditing]
[Authorize(AbpOssManagementPermissions.OssObject.Create)] [Authorize(AbpOssManagementPermissions.OssObject.Create)]
public async virtual Task UploadAsync([FromForm] UploadFileChunkInput input) public virtual Task UploadAsync([FromForm] UploadFileChunkInput input)
{ {
await FileUploader.UploadAsync(input); return FileUploader.UploadAsync(input);
} }
[HttpPost] [HttpPost]
[Route("bulk-delete")] [Route("bulk-delete")]
public async virtual Task BulkDeleteAsync(BulkDeleteOssObjectInput input) [Authorize(AbpOssManagementPermissions.OssObject.Delete)]
public virtual Task BulkDeleteAsync(BulkDeleteOssObjectInput input)
{ {
await OssObjectAppService.BulkDeleteAsync(input); return OssObjectAppService.BulkDeleteAsync(input);
} }
[HttpDelete] [HttpDelete]
public async virtual Task DeleteAsync(GetOssObjectInput input) [Authorize(AbpOssManagementPermissions.OssObject.Delete)]
public virtual Task DeleteAsync(GetOssObjectInput input)
{ {
await OssObjectAppService.DeleteAsync(input); return OssObjectAppService.DeleteAsync(input);
} }
[HttpGet] [HttpGet]
public async virtual Task<OssObjectDto> GetAsync(GetOssObjectInput input) [Authorize(AbpOssManagementPermissions.OssObject.Default)]
public virtual Task<OssObjectDto> GetAsync(GetOssObjectInput input)
{ {
return await OssObjectAppService.GetAsync(input); return OssObjectAppService.GetAsync(input);
} }
[HttpGet] [HttpGet]
[Route("download")] [Route("download")]
public async virtual Task<IRemoteStreamContent> GetContentAsync(GetOssObjectInput input) [Authorize(AbpOssManagementPermissions.OssObject.Download)]
[Obsolete("请使用 GenerateUrlAsync 与 DownloadAsync的组合")]
public virtual Task<IRemoteStreamContent> GetContentAsync(GetOssObjectInput input)
{
return OssObjectAppService.GetContentAsync(input);
}
[HttpGet]
[Route("generate-url")]
[Authorize(AbpOssManagementPermissions.OssObject.Download)]
public virtual Task<string> GenerateUrlAsync(GetOssObjectInput input)
{
return OssObjectAppService.GenerateUrlAsync(input);
}
[HttpGet]
[Route("download/{urlKey}")]
public virtual Task<IRemoteStreamContent> DownloadAsync(string urlKey)
{ {
return await OssObjectAppService.GetContentAsync(input); return OssObjectAppService.DownloadAsync(urlKey);
} }
} }

14
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Minio/LINGYUN/Abp/OssManagement/Minio/MinioOssContainer.cs

@ -95,6 +95,20 @@ public class MinioOssContainer : OssContainerBase, IOssObjectExpireor
new Dictionary<string, string>()); new Dictionary<string, string>());
} }
public async override Task<bool> ObjectExistsAsync(GetOssObjectRequest request)
{
var client = GetMinioClient();
var bucket = GetBucket(request.Bucket);
var prefixPath = GetPrefixPath();
var objectPath = GetBlobPath(prefixPath, request.Path);
var objectName = objectPath.IsNullOrWhiteSpace()
? request.Object
: objectPath + request.Object;
return await ObjectExists(client, bucket, objectName);
}
public async override Task<OssObject> CreateObjectAsync(CreateOssObjectRequest request) public async override Task<OssObject> CreateObjectAsync(CreateOssObjectRequest request)
{ {
var client = GetMinioClient(); var client = GetMinioClient();

16
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Nexus/LINGYUN/Abp/OssManagement/Nexus/NexusOssContainer.cs

@ -77,6 +77,22 @@ internal class NexusOssContainer : OssContainerBase, IOssObjectExpireor
DateTime.Now); DateTime.Now);
} }
public async override Task<bool> ObjectExistsAsync(GetOssObjectRequest request)
{
var nexusConfiguration = GetNexusConfiguration();
var blobPath = GetBasePath(request.Bucket, request.Path, request.Object);
var searchBlobName = GetObjectName(request.Bucket, request.Path, request.Object);
var nexusSearchArgs = new NexusSearchArgs(
nexusConfiguration.Repository,
blobPath,
searchBlobName);
var nexusAssetListResult = await NexusLookupService.ListAssetAsync(nexusSearchArgs);
return nexusAssetListResult.Items.Count != 0;
}
public async override Task<OssObject> CreateObjectAsync(CreateOssObjectRequest request) public async override Task<OssObject> CreateObjectAsync(CreateOssObjectRequest request)
{ {
var nexusConfiguration = GetNexusConfiguration(); var nexusConfiguration = GetNexusConfiguration();

13
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Tencent/LINGYUN/Abp/OssManagement/Tencent/TencentOssContainer.cs

@ -71,6 +71,19 @@ internal class TencentOssContainer : OssContainerBase, IOssObjectExpireor
}); });
} }
public async override Task<bool> ObjectExistsAsync(GetOssObjectRequest request)
{
var ossClient = await CreateClientAsync();
var objectPath = GetBasePath(request.Path);
var objectName = objectPath.IsNullOrWhiteSpace()
? request.Object
: objectPath + request.Object;
return ObjectExists(ossClient, request.Bucket, objectName);
}
public async override Task<OssObject> CreateObjectAsync(CreateOssObjectRequest request) public async override Task<OssObject> CreateObjectAsync(CreateOssObjectRequest request)
{ {
var ossClient = await CreateClientAsync(); var ossClient = await CreateClientAsync();

Loading…
Cancel
Save