Пример #1
0
        private List <string> GetOciPrefixs(string prefix, SearchOption searchOption, string nextStartWith = "")
        {
            var res = new List <string>();

            var listObjectsRequest = new ListObjectsRequest()
            {
                NamespaceName = NamespaceName,
                BucketName    = BucketName,
                Start         = nextStartWith,
                Delimiter     = "/",
                Prefix        = ObjectStorageHelper.EncodeKey(prefix),
                Fields        = new List <string> {
                    "name"
                },
                Limit = 1
            };

            var objects = Client.ListObjects(listObjectsRequest);

            res.AddRange(objects.ListObjects.Prefixes);

            if (!string.IsNullOrEmpty(objects.ListObjects.NextStartWith))
            {
                res.AddRange(GetOciPrefixs(ObjectStorageHelper.DecodeKey(prefix), searchOption, objects.ListObjects.NextStartWith));
            }

            if (objects.ListObjects.Prefixes != null && objects.ListObjects.Prefixes.Count > 0)
            {
                // all sub prefix
                if (searchOption == SearchOption.AllDirectories)
                {
                    foreach (var pre in objects.ListObjects.Prefixes)
                    {
                        res.AddRange(GetOciPrefixs(pre, searchOption));
                    }
                }
                else
                {
                    var newPrefix = objects.ListObjects.Prefixes.Where(p => p == ObjectStorageHelper.EncodeKey(prefix) + "/");
                    if (newPrefix != null && newPrefix.Count() > 0)
                    {
                        foreach (var pre in newPrefix)
                        {
                            res.AddRange(GetOciPrefixs(pre, searchOption));
                        }
                    }
                }
            }

            return(res);
        }
Пример #2
0
        /// <summary>
        /// Returns the directory in the s-bucket to the specified pattern
        /// </summary>
        /// <param name="searchPattern"></param>
        /// <param name="searchOption"></param>
        /// <returns></returns>
        public IEnumerable <ObjectStorageDirectoryInfo> EnumerateDirectories(string searchPattern, SearchOption searchOption)
        {
            IEnumerable <ObjectStorageDirectoryInfo> folders = null;

            if (String.IsNullOrEmpty(BucketName))
            {
                var request = new ListBucketsRequest();
                folders = Client.ListBuckets(request).Items
                          .ConvertAll(bucket => new ObjectStorageDirectoryInfo(Client, NamespaceName, bucket.Name, ""));
            }
            else
            {
                var prefixs = GetOciPrefixs(ObjectKey, searchOption);

                folders = prefixs.ToList()
                          .ConvertAll(f => new ObjectStorageDirectoryInfo(Client, NamespaceName, BucketName, ObjectStorageHelper.DecodeKey(f)));
            }

            //filter based on search pattern
            var regEx = WildcardToRegex(searchPattern);

            folders = folders.Where(f => Regex.IsMatch(f.Name, regEx, RegexOptions.IgnoreCase));
            return(folders);
        }
Пример #3
0
        /// <summary>
        /// Get the object in the bucket.
        /// </summary>
        /// <param name="prefix"></param>
        /// <param name="searchOption"></param>
        /// <param name="maxCount"></param>
        /// <param name="nextStartWith"></param>
        /// <returns></returns>
        private List <ObjectSummary> GetOciObjects(string prefix, SearchOption searchOption, int maxCount, string nextStartWith = "")
        {
            var res = new List <ObjectSummary>();

            if (maxCount == -1)
            {
                maxCount = GET_OBJECT_LIMIT;
            }

            string delimiter = "";
            var    prefixReg = ObjectStorageHelper.EncodeKey(prefix);

            if (prefixReg.Contains("/"))
            {
                delimiter = "/";
            }

            var listObjectsRequest = new ListObjectsRequest()
            {
                NamespaceName = NamespaceName,
                BucketName    = BucketName,
                Start         = nextStartWith,
                Delimiter     = delimiter,
                Prefix        = prefixReg,
                Fields        = new List <string> {
                    "name", "size", "timeCreated", "md5"
                },
                Limit = maxCount
            };

            var objects = Client.ListObjects(listObjectsRequest);

            if (searchOption == SearchOption.TopDirectoryOnly)
            {
                foreach (var o in objects.ListObjects.Objects)
                {
                    if (CheckAddObject(o, prefixReg, searchOption))
                    {
                        res.Add(o);
                    }
                }
            }
            else
            {
                foreach (var o in objects.ListObjects.Objects)
                {
                    if (CheckAddObject(o, prefixReg, searchOption))
                    {
                        res.Add(o);
                    }
                }
            }

            NextPageId = objects.ListObjects.NextStartWith;
            // next check
            if (!string.IsNullOrEmpty(objects.ListObjects.NextStartWith))
            {
                if (maxCount == -1)
                {
                    res.AddRange(GetOciObjects(ObjectStorageHelper.DecodeKey(prefix), searchOption, maxCount, objects.ListObjects.NextStartWith));
                }
            }

            if (objects.ListObjects.Prefixes != null && objects.ListObjects.Prefixes.Count > 0)
            {
                // all sub prefix
                if (searchOption == SearchOption.AllDirectories)
                {
                    foreach (var pre in objects.ListObjects.Prefixes)
                    {
                        res.AddRange(GetOciObjects(pre, searchOption, maxCount));
                    }
                }
                else
                {
                    var newPrefix = objects.ListObjects.Prefixes.Where(p => p == prefixReg + "/");
                    if (newPrefix != null && newPrefix.Count() > 0)
                    {
                        foreach (var pre in newPrefix)
                        {
                            res.AddRange(GetOciObjects(pre, searchOption, maxCount));
                        }
                    }
                }
            }

            return(res);
        }
Пример #4
0
        /// <summary>
        /// returns files in a directory according to the specified search pattern
        /// </summary>
        /// <param name="searchPattern"></param>
        /// <param name="searchOption"></param>
        /// <param name="maxCount"></param>
        /// <param name="nextPageId"></param>
        /// <returns></returns>
        public IEnumerable <ObjectStorageFileInfo> EnumerateFiles(string searchPattern, SearchOption searchOption, int maxCount, string nextPageId)
        {
            IEnumerable <ObjectStorageFileInfo> files = null;

            if (String.IsNullOrEmpty(BucketName))
            {
                files = new List <ObjectStorageFileInfo>();
            }
            else
            {
                var metaFiles = GetOciObjects(ObjectKey, searchOption, maxCount, nextPageId).Where(f => !f.Name.EndsWith("/")).ToList();

                files = new EnumerableConverter <ObjectSummary, ObjectStorageFileInfo>
                            (metaFiles, o => new ObjectStorageFileInfo(Client, NamespaceName, BucketName, ObjectStorageHelper.DecodeKey(o.Name)));
            }

            var regEx = WildcardToRegex(searchPattern);

            files = files.Where(o => Regex.IsMatch(o.Name, regEx, RegexOptions.IgnoreCase));
            return(files);
        }