public virtual async Task <GetOssContainersResponse> GetListAsync(GetOssContainersRequest request) { var ossClient = await CreateClientAsync(); var aliyunRequest = new ListBucketsRequest { Marker = request.Marker, Prefix = request.Prefix, MaxKeys = request.MaxKeys }; var bucketsResponse = ossClient.ListBuckets(aliyunRequest); return(new GetOssContainersResponse( bucketsResponse.Prefix, bucketsResponse.Marker, bucketsResponse.NextMaker, bucketsResponse.MaxKeys ?? 0, bucketsResponse.Buckets .Select(x => new OssContainer( x.Name, x.CreationDate, 0L, x.CreationDate, new Dictionary <string, string> { { "Id", x.Owner?.Id }, { "DisplayName", x.Owner?.DisplayName } })) .ToList())); }
public virtual Task <GetOssContainersResponse> GetListAsync(GetOssContainersRequest request) { // 不传递Bucket 检索根目录的Bucket var filePath = CalculateFilePath(null); // 获取根目录 var directories = Directory.GetDirectories(filePath, request.Prefix ?? "*.*"); // 排序目录 Array.Sort(directories, delegate(string x, string y) { return(x.CompareTo(y)); }); var spiltDirectories = directories; // 计算标记的位置进行截断 if (!request.Marker.IsNullOrWhiteSpace()) { var markIndex = directories.FindIndex(x => x.EndsWith(request.Marker)); if (markIndex < 0) { directories = new string[0]; } else { var markDirectories = new string[directories.Length - markIndex]; Array.Copy(directories, markIndex, markDirectories, 0, markDirectories.Length); directories = markDirectories; } } // 需要截断最大的容器集合 if (request.MaxKeys.HasValue) { spiltDirectories = directories.Take(request.MaxKeys ?? directories.Length).ToArray(); } var nextDirectory = spiltDirectories.Length < directories.Length ? directories[spiltDirectories.Length] : ""; if (!nextDirectory.IsNullOrWhiteSpace()) { // 下一个标记的目录名称 nextDirectory = new DirectoryInfo(nextDirectory).Name; } // 容器对应的目录信息集合 var directoryInfos = spiltDirectories.Select(x => new DirectoryInfo(x)); // 返回Oss容器描述集合 var response = new GetOssContainersResponse( request.Prefix, request.Marker, nextDirectory, directories.Length, directoryInfos.Select(x => new OssContainer( x.Name, x.CreationTime, 0L, x.LastWriteTime, new Dictionary <string, string> { { "LastAccessTime", x.LastAccessTime.ToString("yyyy-MM-dd HH:mm:ss") } })) .ToList()); return(Task.FromResult(response)); }