Browse Source

fix(oss): fix local file system paging control parameters

pull/334/head
cKey 4 years ago
parent
commit
8f7f80907c
  1. 3
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Aliyun/LINGYUN/Abp/OssManagement/Aliyun/AliyunOssContainer.cs
  2. 4
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/OssContainerAppService.cs
  3. 3
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/GetOssContainersRequest.cs
  4. 3
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/GetOssObjectsRequest.cs
  5. 6
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/IOssContainerExtensions.cs
  6. 84
      aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem/LINGYUN/Abp/OssManagement/FileSystem/FileSystemOssContainer.cs

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

@ -239,6 +239,7 @@ namespace LINGYUN.Abp.OssManagement.Aliyun
{ {
var ossClient = await CreateClientAsync(); var ossClient = await CreateClientAsync();
// TODO: 阿里云的分页差异需要前端来弥补,传递Marker, 按照Oss控制台的逻辑,直接把MaxKeys设置较大值就行了
var aliyunRequest = new ListBucketsRequest var aliyunRequest = new ListBucketsRequest
{ {
Marker = request.Marker, Marker = request.Marker,
@ -275,6 +276,8 @@ namespace LINGYUN.Abp.OssManagement.Aliyun
var marker = !objectPath.IsNullOrWhiteSpace() && !request.Marker.IsNullOrWhiteSpace() var marker = !objectPath.IsNullOrWhiteSpace() && !request.Marker.IsNullOrWhiteSpace()
? request.Marker.Replace(objectPath, "") ? request.Marker.Replace(objectPath, "")
: request.Marker; : request.Marker;
// TODO: 阿里云的分页差异需要前端来弥补,传递Marker, 按照Oss控制台的逻辑,直接把MaxKeys设置较大值就行了
var aliyunRequest = new ListObjectsRequest(request.BucketName) var aliyunRequest = new ListObjectsRequest(request.BucketName)
{ {
Marker = !marker.IsNullOrWhiteSpace() ? objectPath + marker : marker, Marker = !marker.IsNullOrWhiteSpace() ? objectPath + marker : marker,

4
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/OssContainerAppService.cs

@ -45,7 +45,7 @@ namespace LINGYUN.Abp.OssManagement
var oss = CreateOssContainer(); var oss = CreateOssContainer();
var containerResponse = await oss.GetListAsync( var containerResponse = await oss.GetListAsync(
input.Prefix, input.Marker, input.MaxResultCount); input.Prefix, input.Marker, input.SkipCount, input.MaxResultCount);
return ObjectMapper.Map<GetOssContainersResponse, OssContainersResultDto>(containerResponse); return ObjectMapper.Map<GetOssContainersResponse, OssContainersResultDto>(containerResponse);
} }
@ -57,7 +57,7 @@ namespace LINGYUN.Abp.OssManagement
var ossObjectResponse = await oss.GetObjectsAsync( var ossObjectResponse = await oss.GetObjectsAsync(
input.Bucket, input.Prefix, input.Marker, input.Bucket, input.Prefix, input.Marker,
input.Delimiter, input.EncodingType, input.Delimiter, input.EncodingType,
input.MaxResultCount); input.SkipCount, input.MaxResultCount);
return ObjectMapper.Map<GetOssObjectsResponse, OssObjectsResultDto>(ossObjectResponse); return ObjectMapper.Map<GetOssObjectsResponse, OssObjectsResultDto>(ossObjectResponse);
} }

3
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/GetOssContainersRequest.cs

@ -4,14 +4,17 @@
{ {
public string Prefix { get; } public string Prefix { get; }
public string Marker { get; } public string Marker { get; }
public int Current { get; }
public int? MaxKeys { get; } public int? MaxKeys { get; }
public GetOssContainersRequest( public GetOssContainersRequest(
string prefix = null, string prefix = null,
string marker = null, string marker = null,
int current = 0,
int? maxKeys = 10) int? maxKeys = 10)
{ {
Prefix = prefix; Prefix = prefix;
Marker = marker; Marker = marker;
Current = current;
MaxKeys = maxKeys; MaxKeys = maxKeys;
} }
} }

3
aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/GetOssObjectsRequest.cs

@ -10,6 +10,7 @@ namespace LINGYUN.Abp.OssManagement
public string Delimiter { get; } public string Delimiter { get; }
public string Marker { get; } public string Marker { get; }
public string EncodingType { get; } public string EncodingType { get; }
public int Current { get; }
public int? MaxKeys { get; } public int? MaxKeys { get; }
public GetOssObjectsRequest( public GetOssObjectsRequest(
[NotNull] string bucketName, [NotNull] string bucketName,
@ -17,6 +18,7 @@ namespace LINGYUN.Abp.OssManagement
string marker = null, string marker = null,
string delimiter = null, string delimiter = null,
string encodingType = null, string encodingType = null,
int current = 0,
int maxKeys = 10) int maxKeys = 10)
{ {
Check.NotNullOrWhiteSpace(bucketName, nameof(bucketName)); Check.NotNullOrWhiteSpace(bucketName, nameof(bucketName));
@ -26,6 +28,7 @@ namespace LINGYUN.Abp.OssManagement
Marker = marker; Marker = marker;
Delimiter = delimiter; Delimiter = delimiter;
EncodingType = encodingType; EncodingType = encodingType;
Current = current;
MaxKeys = maxKeys; MaxKeys = maxKeys;
} }
} }

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

@ -47,10 +47,11 @@ namespace LINGYUN.Abp.OssManagement
this IOssContainer ossContainer, this IOssContainer ossContainer,
string prefix = null, string prefix = null,
string marker = null, string marker = null,
int skipCount = 0,
int maxResultCount = 10) int maxResultCount = 10)
{ {
return await ossContainer.GetListAsync( return await ossContainer.GetListAsync(
new GetOssContainersRequest(prefix, marker, maxResultCount)); new GetOssContainersRequest(prefix, marker, skipCount, maxResultCount));
} }
public static async Task<OssObject> GetObjectAsync( public static async Task<OssObject> GetObjectAsync(
@ -70,10 +71,11 @@ namespace LINGYUN.Abp.OssManagement
string marker = null, string marker = null,
string delimiter = null, string delimiter = null,
string encodingType = null, string encodingType = null,
int skipCount = 0,
int maxResultCount = 10) int maxResultCount = 10)
{ {
return await ossContainer.GetObjectsAsync( return await ossContainer.GetObjectsAsync(
new GetOssObjectsRequest(name, prefix, marker, delimiter, encodingType, maxResultCount)); new GetOssObjectsRequest(name, prefix, marker, delimiter, encodingType, skipCount, maxResultCount));
} }
} }
} }

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

@ -337,30 +337,11 @@ namespace LINGYUN.Abp.OssManagement.FileSystem
{ {
return x.CompareTo(y); return x.CompareTo(y);
}); });
// 需要计算从哪个位置截断
int markIndex = 0;
if (!request.Marker.IsNullOrWhiteSpace())
{
markIndex = directories.FindIndex(x => x.EndsWith(request.Marker));
if (markIndex < 0)
{
markIndex = 0;
}
}
var spiltDirectories = directories;
if (markIndex > 0)
{
spiltDirectories = directories[markIndex..];
}
// 截取指定数量的目录
int maxResultCount = request.MaxKeys ?? 10;
// 容器对应的目录信息集合 // 容器对应的目录信息集合
var directoryInfos = spiltDirectories // 本地文件系统直接用PageBy即可
.Take(maxResultCount) var directoryInfos = directories
.AsQueryable()
.PageBy(request.Current, request.MaxKeys ?? 10)
.Select(file => new DirectoryInfo(file)) .Select(file => new DirectoryInfo(file))
.ToArray(); .ToArray();
var nextMarkerIndex = directories.FindIndex(x => x.EndsWith(directoryInfos[directoryInfos.Length - 1].Name)); var nextMarkerIndex = directories.FindIndex(x => x.EndsWith(directoryInfos[directoryInfos.Length - 1].Name));
@ -431,38 +412,41 @@ namespace LINGYUN.Abp.OssManagement.FileSystem
return x.CompareTo(y); return x.CompareTo(y);
}); });
// 需要计算从哪个位置截断 //// 需要计算从哪个位置截断
int markIndex = 0; //int markIndex = 0;
if (!request.Marker.IsNullOrWhiteSpace()) //if (!request.Marker.IsNullOrWhiteSpace())
{ //{
markIndex = fileSystemNames.FindIndex(x => x.EndsWith(request.Marker)); // markIndex = fileSystemNames.FindIndex(x => x.EndsWith(request.Marker));
if (markIndex < 0) // if (markIndex < 0)
{ // {
markIndex = 0; // markIndex = 0;
} // }
} //}
// 需要截断Oss对象列表 //// 需要截断Oss对象列表
var copyFileSystemNames = fileSystemNames; //var copyFileSystemNames = fileSystemNames;
if (markIndex > 0) //if (markIndex > 0)
{ //{
// fix: 翻页查询数组可能引起下标越界 // // fix: 翻页查询数组可能引起下标越界
// copyFileSystemNames = fileSystemNames[(markIndex+1)..]; // // copyFileSystemNames = fileSystemNames[(markIndex+1)..];
copyFileSystemNames = fileSystemNames[markIndex..]; // copyFileSystemNames = fileSystemNames[markIndex..];
} //}
// 截取指定数量的Oss对象
int maxResultCount = request.MaxKeys ?? 10;
// Oss对象信息集合 // Oss对象信息集合
var fileSystems = copyFileSystemNames
.Take(maxResultCount) static FileSystemInfo ConvertFileSystem(string path)
.Select<string, FileSystemInfo>(file =>
{ {
if (File.Exists(file)) if (File.Exists(path))
{ {
return new FileInfo(file); return new FileInfo(path);
} }
return new DirectoryInfo(file);
}) return new DirectoryInfo(path);
}
var fileSystems = fileSystemNames
.AsQueryable()
.PageBy(request.Current, request.MaxKeys ?? 10)
.Select(ConvertFileSystem)
.ToArray(); .ToArray();
// 计算下一页起始标记文件/目录名称 // 计算下一页起始标记文件/目录名称

Loading…
Cancel
Save