Esempio n. 1
0
        private static void FillResult(RavenStorageClient.ListBlobResult result, Page <BlobHierarchyItem> page, bool listFolders)
        {
            result.List = page.Values
                          .Where(x => listFolders || x.IsBlob)
                          .Select(x => listFolders ? RestorePointsBase.GetDirectoryName(x.IsPrefix ? x.Prefix : x.Blob.Name) : x.Blob.Name)
                          .Distinct()
                          .Select(x => new RavenStorageClient.BlobProperties {
                Name = x
            })
                          .ToList();

            if (string.IsNullOrWhiteSpace(page.ContinuationToken) == false)
            {
                result.ContinuationToken = page.ContinuationToken;
            }
        }
Esempio n. 2
0
        public async Task <ListBlobResult> ListBlobsAsync(string prefix, string delimiter, bool listFolders, int?maxResult = null, string marker = null)
        {
            var url = GetUrl(_serverUrlForContainer, "restype=container&comp=list");

            if (prefix != null)
            {
                url += $"&prefix={Uri.EscapeDataString(prefix)}";
            }

            if (delimiter != null)
            {
                url += $"&delimiter={delimiter}";
            }

            if (maxResult != null)
            {
                url += $"&maxresults={maxResult}";
            }

            if (marker != null)
            {
                url += $"&marker={marker}";
            }

            var requestMessage = new HttpRequestMessage(HttpMethods.Get, url)
            {
                Headers =
                {
                    { "x-ms-date",    SystemTime.UtcNow.ToString("R") },
                    { "x-ms-version", AzureStorageVersion             }
                }
            };
            var client = GetClient();

            SetAuthorizationHeader(client, HttpMethods.Get, url, requestMessage.Headers);

            var response = await client.SendAsync(requestMessage, CancellationToken).ConfigureAwait(false);

            if (response.StatusCode == HttpStatusCode.NotFound)
            {
                return new ListBlobResult
                       {
                           List = new List <BlobProperties>()
                       }
            }
            ;

            if (response.IsSuccessStatusCode == false)
            {
                throw StorageException.FromResponseMessage(response);
            }

            var responseStream = await response.Content.ReadAsStreamAsync();

            var listBlobsResult = XDocument.Load(responseStream);
            var result          = GetResult();

            var nextMarker = listBlobsResult.Root.Element("NextMarker")?.Value;

            return(new ListBlobResult
            {
                List = result,
                NextMarker = nextMarker == "true" ? listBlobsResult.Root.Element("NextMarker")?.Value : null
            });

            IEnumerable <BlobProperties> GetResult()
            {
                if (listFolders)
                {
                    return(listBlobsResult
                           .Descendants("Blobs")
                           .Descendants("Name")
                           .Select(x => RestorePointsBase.GetDirectoryName(x.Value))
                           .Distinct()
                           .Select(x => new BlobProperties
                    {
                        Name = x
                    }));
                }

                return(listBlobsResult
                       .Descendants("Blob")
                       .Select(x => new BlobProperties
                {
                    Name = x.Element("Name")?.Value,
                }));
            }
        }