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();
// TODO: 阿里云的分页差异需要前端来弥补,传递Marker, 按照Oss控制台的逻辑,直接把MaxKeys设置较大值就行了
var aliyunRequest = new ListBucketsRequest
{
Marker = request.Marker,
@ -275,6 +276,8 @@ namespace LINGYUN.Abp.OssManagement.Aliyun
var marker = !objectPath.IsNullOrWhiteSpace() && !request.Marker.IsNullOrWhiteSpace()
? request.Marker.Replace(objectPath, "")
: request.Marker;
// TODO: 阿里云的分页差异需要前端来弥补,传递Marker, 按照Oss控制台的逻辑,直接把MaxKeys设置较大值就行了
var aliyunRequest = new ListObjectsRequest(request.BucketName)
{
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 containerResponse = await oss.GetListAsync(
input.Prefix, input.Marker, input.MaxResultCount);
input.Prefix, input.Marker, input.SkipCount, input.MaxResultCount);
return ObjectMapper.Map<GetOssContainersResponse, OssContainersResultDto>(containerResponse);
}
@ -57,7 +57,7 @@ namespace LINGYUN.Abp.OssManagement
var ossObjectResponse = await oss.GetObjectsAsync(
input.Bucket, input.Prefix, input.Marker,
input.Delimiter, input.EncodingType,
input.MaxResultCount);
input.SkipCount, input.MaxResultCount);
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 Marker { get; }
public int Current { get; }
public int? MaxKeys { get; }
public GetOssContainersRequest(
string prefix = null,
string marker = null,
int current = 0,
int? maxKeys = 10)
{
Prefix = prefix;
Marker = marker;
Current = current;
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 Marker { get; }
public string EncodingType { get; }
public int Current { get; }
public int? MaxKeys { get; }
public GetOssObjectsRequest(
[NotNull] string bucketName,
@ -17,6 +18,7 @@ namespace LINGYUN.Abp.OssManagement
string marker = null,
string delimiter = null,
string encodingType = null,
int current = 0,
int maxKeys = 10)
{
Check.NotNullOrWhiteSpace(bucketName, nameof(bucketName));
@ -26,6 +28,7 @@ namespace LINGYUN.Abp.OssManagement
Marker = marker;
Delimiter = delimiter;
EncodingType = encodingType;
Current = current;
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,
string prefix = null,
string marker = null,
int skipCount = 0,
int maxResultCount = 10)
{
return await ossContainer.GetListAsync(
new GetOssContainersRequest(prefix, marker, maxResultCount));
new GetOssContainersRequest(prefix, marker, skipCount, maxResultCount));
}
public static async Task<OssObject> GetObjectAsync(
@ -70,10 +71,11 @@ namespace LINGYUN.Abp.OssManagement
string marker = null,
string delimiter = null,
string encodingType = null,
int skipCount = 0,
int maxResultCount = 10)
{
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);
});
// 需要计算从哪个位置截断
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
.Take(maxResultCount)
// 本地文件系统直接用PageBy即可
var directoryInfos = directories
.AsQueryable()
.PageBy(request.Current, request.MaxKeys ?? 10)
.Select(file => new DirectoryInfo(file))
.ToArray();
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);
});
// 需要计算从哪个位置截断
int markIndex = 0;
if (!request.Marker.IsNullOrWhiteSpace())
//// 需要计算从哪个位置截断
//int markIndex = 0;
//if (!request.Marker.IsNullOrWhiteSpace())
//{
// markIndex = fileSystemNames.FindIndex(x => x.EndsWith(request.Marker));
// if (markIndex < 0)
// {
// markIndex = 0;
// }
//}
//// 需要截断Oss对象列表
//var copyFileSystemNames = fileSystemNames;
//if (markIndex > 0)
//{
// // fix: 翻页查询数组可能引起下标越界
// // copyFileSystemNames = fileSystemNames[(markIndex+1)..];
// copyFileSystemNames = fileSystemNames[markIndex..];
//}
// Oss对象信息集合
static FileSystemInfo ConvertFileSystem(string path)
{
markIndex = fileSystemNames.FindIndex(x => x.EndsWith(request.Marker));
if (markIndex < 0)
if (File.Exists(path))
{
markIndex = 0;
return new FileInfo(path);
}
}
// 需要截断Oss对象列表
var copyFileSystemNames = fileSystemNames;
if (markIndex > 0)
{
// fix: 翻页查询数组可能引起下标越界
// copyFileSystemNames = fileSystemNames[(markIndex+1)..];
copyFileSystemNames = fileSystemNames[markIndex..];
return new DirectoryInfo(path);
}
// 截取指定数量的Oss对象
int maxResultCount = request.MaxKeys ?? 10;
// Oss对象信息集合
var fileSystems = copyFileSystemNames
.Take(maxResultCount)
.Select<string, FileSystemInfo>(file =>
{
if (File.Exists(file))
{
return new FileInfo(file);
}
return new DirectoryInfo(file);
})
var fileSystems = fileSystemNames
.AsQueryable()
.PageBy(request.Current, request.MaxKeys ?? 10)
.Select(ConvertFileSystem)
.ToArray();
// 计算下一页起始标记文件/目录名称

Loading…
Cancel
Save