Beispiel #1
0
        private void QueryS3Objects(S3ObjectSearchRequest searchRequest, S3ObjectSearchResponse searchResponse)
        {
            using (var session = documentStore.OpenSession())
              {
            var query = string.IsNullOrWhiteSpace(searchRequest.Prefix) ? string.Format("Bucket:{0}", searchRequest.BucketName) :
                                                                      string.Format("Bucket:{0} AND Key:{1}*", searchRequest.BucketName, searchRequest.Prefix);

            searchResponse.S3Objects = session.Advanced
                                          .LuceneQuery<S3Object, S3Object_Search>()
                                          .Where(query)
                                          .Take(searchRequest.MaxKeys ?? 1000)
                                          .WaitForNonStaleResultsAsOfNow()
                                          .ToList();
              }

              if (!string.IsNullOrWhiteSpace(searchRequest.Delimiter))
              {
            ApplyDelimiterFilter(searchRequest, searchResponse);
              }
        }
Beispiel #2
0
        public S3ObjectSearchResponse GetObjects(S3ObjectSearchRequest searchRequest)
        {
            var searchResponse = new S3ObjectSearchResponse
              {
            BucketName = searchRequest.BucketName,
            Delimiter = searchRequest.Delimiter,
            Marker = searchRequest.Marker,
            MaxKeys = searchRequest.MaxKeys,
            Prefix = searchRequest.Prefix,
            IsTruncated = false,
            S3Objects = new List<S3Object>(),
            Prefixes = new List<string>()
              };

              var bucket = GetBucket(searchRequest.BucketName);
              if (bucket == null)
              {
            return searchResponse;
              }

              QueryS3Objects(searchRequest, searchResponse);

              return searchResponse;
        }
Beispiel #3
0
        private void ApplyDelimiterFilter(S3ObjectSearchRequest searchRequest, S3ObjectSearchResponse searchResponse)
        {
            IList<string> prefixStrings = new List<string>();
              IList<S3Object> objectsToRemove = new List<S3Object>();
              foreach (var s3Object in searchResponse.S3Objects)
              {
            var match = Regex.Match(s3Object.Key,
                                string.Format("({0}.*?{1}).*?", searchRequest.Prefix, searchRequest.Delimiter));
            if (!match.Success) continue;

            var @group = match.Groups[0].Value;
            if (!prefixStrings.Contains(@group))
            {
              prefixStrings.Add(@group);
            }
            objectsToRemove.Add(s3Object);
              }

              foreach (var s3Object in objectsToRemove)
              {
            searchResponse.S3Objects.Remove(s3Object);
              }

              searchResponse.Prefixes = prefixStrings;
        }
Beispiel #4
0
        private Response ListObjects(string bucket)
        {
            var bucketObject = storage.GetBucket(bucket);
              if (bucketObject == null)
              {
            var responseNotFound = responder.Respond(new BucketNotFound { BucketName = bucket });
            responseNotFound.StatusCode = HttpStatusCode.NotFound;
            return responseNotFound;
              }

              var searchRequest = new S3ObjectSearchRequest
              {
            BucketName = bucket,
            Prefix = Request.Query.prefix.HasValue ? Request.Query.prefix : string.Empty,
            Delimiter = Request.Query.delimiter.HasValue ? Request.Query.delimiter : string.Empty,
            Marker = Request.Query.marker.HasValue ? Request.Query.marker : string.Empty,
            MaxKeys = Request.Query.maxkeys.HasValue ? Request.Query.maxkeys : 1000,
              };

              var searchResponse = storage.GetObjects(searchRequest);
              var response = responder.Respond(searchResponse);
              return response;
        }