Esempio n. 1
0
        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()));
        }
Esempio n. 2
0
        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));
        }