示例#1
0
        public S3Controller()
        {
            Authentication = new Authentication();

            PreprocessPerformsDiscovery = true;

            ListType = S3ListType.File;

            TemplateKVP["[BucketName]"] = "Reserved";
            TemplateKVP["[KeyPrefix]"]  = "Reserved";
        }
示例#2
0
        public List <S3Object> ListObjects(string bucketName, string prefix, S3ListType listType, bool recurse, string directoryFilter, string fileFilter)
        {
            List <S3Object> ret = new List <S3Object>();

            prefix = prefix.Replace('\\', '/');
            prefix = prefix.TrimEnd('/');

            Regex inclusiveDirFilter = STEM.Sys.IO.Path.BuildInclusiveFilter(directoryFilter);
            Regex exclusiveDirFilter = STEM.Sys.IO.Path.BuildExclusiveFilter(directoryFilter);

            Regex inclusiveFileFilter = STEM.Sys.IO.Path.BuildInclusiveFilter(fileFilter);
            Regex exclusiveFileFilter = STEM.Sys.IO.Path.BuildExclusiveFilter(fileFilter);

            if (String.IsNullOrEmpty(bucketName))
            {
                List <S3Object> buckets = new List <S3Object>();
                foreach (S3Bucket i in ListBuckets())
                {
                    S3Object o = new S3Object();
                    o.BucketName   = i.BucketName;
                    o.Key          = "";
                    o.LastModified = i.CreationDate;
                    o.Size         = -1;

                    buckets.Add(o);
                }

                if (listType != S3ListType.File)
                {
                    if (inclusiveDirFilter != null)
                    {
                        buckets = buckets.Where(i => inclusiveDirFilter.IsMatch(STEM.Sys.IO.Path.GetFileName(i.BucketName.TrimEnd('/')).ToUpper())).ToList();
                    }

                    if (exclusiveDirFilter != null)
                    {
                        buckets = buckets.Where(i => !exclusiveDirFilter.IsMatch(STEM.Sys.IO.Path.GetFileName(i.BucketName.TrimEnd('/')).ToUpper())).ToList();
                    }

                    ret.AddRange(buckets);
                }

                if (recurse)
                {
                    foreach (S3Object i in buckets)
                    {
                        ret.AddRange(ListObjects(i.BucketName, "", listType, recurse, directoryFilter, fileFilter));
                    }
                }

                return(ret);
            }

            List <S3Object> fullList = ListObjects(bucketName, prefix);

            ret = fullList.Where(i => i.Key.EndsWith("/") && i.Key.TrimEnd('/') != prefix).ToList();

            if (inclusiveDirFilter != null)
            {
                ret = ret.Where(i => inclusiveDirFilter.IsMatch(STEM.Sys.IO.Path.GetFileName(i.Key.TrimEnd('/')).ToUpper())).ToList();
            }

            if (exclusiveDirFilter != null)
            {
                ret = ret.Where(i => !exclusiveDirFilter.IsMatch(STEM.Sys.IO.Path.GetFileName(i.Key.TrimEnd('/')).ToUpper())).ToList();
            }

            if (!recurse)
            {
                ret = ret.Where(i => STEM.Sys.IO.Path.GetDirectoryName(i.Key.TrimEnd('/')).Replace("\\", "/").Equals(prefix, StringComparison.InvariantCultureIgnoreCase)).ToList();
            }

            List <S3Object> ret2 = fullList.Where(i => !i.Key.EndsWith("/")).ToList();

            if (inclusiveFileFilter != null)
            {
                ret2 = ret2.Where(i => inclusiveFileFilter.IsMatch(STEM.Sys.IO.Path.GetFileName(i.Key).ToUpper())).ToList();
            }

            if (exclusiveFileFilter != null)
            {
                ret2 = ret2.Where(i => !exclusiveFileFilter.IsMatch(STEM.Sys.IO.Path.GetFileName(i.Key).ToUpper())).ToList();
            }

            foreach (S3Object o in ret2)
            {
                if (ret.Exists(i => i.Key.Equals(STEM.Sys.IO.Path.GetDirectoryName(o.Key).Replace("\\", "/") + "/", StringComparison.InvariantCultureIgnoreCase)))
                {
                    ret.Add(o);
                }
                else if (prefix.Equals(STEM.Sys.IO.Path.GetDirectoryName(o.Key).Replace("\\", "/"), StringComparison.InvariantCultureIgnoreCase))
                {
                    ret.Add(o);
                }
            }

            if (listType == S3ListType.Directory)
            {
                ret = ret.Where(i => i.Key.EndsWith("/") && i.Key.TrimEnd('/') != prefix).ToList();
            }
            else if (listType == S3ListType.File)
            {
                ret = ret.Where(i => !i.Key.EndsWith("/")).ToList();
            }

            return(ret);
        }