예제 #1
0
        /// <summary>
        /// 根据标签筛选空间获取空间名列表
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public BucketItemResultDto GetBucketList(GetBucketParam request)
        {
            UrlParameter urlParameter = new UrlParameter();

            request.TagFilters.ForEach(tag => { urlParameter.Add(tag.Key, tag.Value); });
            string url =
                $"http://rs.qbox.me/buckets?tagCondition={Base64.UrlSafeBase64Encode(urlParameter.GetQueryResult())}";

            _httpClient.Headers = new Dictionary <string, string>()
            {
                { "Authorization", $"{_storageProvider.GetManageToken(new GetManageTokenParam(url))}" }
            };
            try
            {
                var response = _httpClient.GetString(url);
                return(GetResponse(response, () =>
                {
                    var bucketList = _jsonProvider.Deserialize <List <string> >(response);
                    Expression <Func <string, bool> > condition = x => true;
                    if (!string.IsNullOrEmpty(request.Prefix))
                    {
                        condition = condition.And(x => x.StartsWith(request.Prefix));
                    }

                    var list = bucketList.Where(condition.Compile()).ToList();
                    if (!string.IsNullOrEmpty(request.Marker))
                    {
                        var index = list.ToList().IndexOf(request.Marker);
                        if (index != -1)
                        {
                            list = list.Skip(index + 1).ToList();
                        }
                    }

                    if (request.PageSize != -1)
                    {
                        var isTruncated = list.Take(request.PageSize).Count() != list.Count;
                        return new BucketItemResultDto(
                            list.Take(request.PageSize).Select(x => new BucketItemResultDto.BucketItemDto(null, x))
                            .ToList(), request.Prefix,
                            isTruncated, request.Marker,
                            isTruncated ? list.Take(request.PageSize).LastOrDefault() : "");
                    }

                    return new BucketItemResultDto(
                        list.Select(x => new BucketItemResultDto.BucketItemDto(null, x)).ToList(), request.Prefix,
                        false, request.Marker, "");
                },
                                   resultResponse =>
                                   new BucketItemResultDto(request.Prefix, request.Marker,
                                                           $"{resultResponse.Error}|{resultResponse.ErrorCode}")));
            }
            catch (Exception ex)
            {
                this._logger?.LogError(ex.ExtractAllStackTrace());
                return(new BucketItemResultDto(request.Prefix, request.Marker, $"lose {ex.Message}"));
            }
        }
        /// <summary>
        /// 获取空间列表
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public BucketItemResultDto GetBucketList(GetBucketParam request)
        {
            return(ToolCommon.GetResponse(() =>
            {
                var zone = Core.Tools.GetZone(_aLiYunConfig, request.PersistentOps.Zone, () => ZoneEnum.HangZhou);
                var client = _aLiYunConfig.GetClient(zone);
                ListBucketsRequest listBucketsRequest = new ListBucketsRequest();
                if (request.PageSize != -1)
                {
                    listBucketsRequest.MaxKeys = request.PageSize;
                }

                if (request.TagFilters.Count > 0)
                {
                    var keyValue = request.TagFilters.FirstOrDefault();
                    listBucketsRequest.Tag = new Tag()
                    {
                        Key = keyValue.Key,
                        Value = keyValue.Value
                    };
                }

                if (!string.IsNullOrEmpty(request.Prefix))
                {
                    listBucketsRequest.Prefix = request.Prefix;
                }

                if (!string.IsNullOrEmpty(request.Marker))
                {
                    listBucketsRequest.Marker = request.Marker;
                }

                var ret = client.ListBuckets(listBucketsRequest);
                if (ret.HttpStatusCode == HttpStatusCode.OK)
                {
                    return new BucketItemResultDto(
                        ret.Buckets.Select(x =>
                                           new BucketItemResultDto.BucketItemDto((int?)Core.Tools.GetZoneByLocation(x.Location),
                                                                                 x.Name)).ToList(), ret.Prefix,
                        ret.IsTruncated,
                        ret.Marker, ret.NextMaker);
                }

                return new BucketItemResultDto(request.Prefix, request.Marker,
                                               $"lose RequestId:{ret.RequestId},HttpStatusCode:{ret.HttpStatusCode}");
            }, message => new BucketItemResultDto(request.Prefix, request.Marker, message)));
        }
 public BucketItemResultDto GetBucketList(GetBucketParam request)
 {
     throw new System.NotImplementedException();
 }