public AzureStorageController()
        {
            Authentication = new Authentication();

            PreprocessPerformsDiscovery = true;

            ListType = AzureListType.File;

            TemplateKVP["[ContainerName]"] = "Reserved";
        }
예제 #2
0
        public List <IListBlobItem> ListObjects(string containerName, string directory, AzureListType listType, bool recurse, string directoryFilter, string fileFilter)
        {
            List <IListBlobItem> ret = new List <IListBlobItem>();

            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(containerName))
            {
                foreach (CloudBlobContainer cc in ListContainers())
                {
                    foreach (IListBlobItem blob in ListBlobs(cc))
                    {
                        if (blob is CloudBlockBlob)
                        {
                            if (listType == AzureListType.File || listType == AzureListType.All)
                            {
                                string path = ToString(blob);
                                string dir  = STEM.Sys.IO.Path.GetDirectoryName(path);

                                if (inclusiveDirFilter == null || inclusiveDirFilter.IsMatch(STEM.Sys.IO.Path.GetFileName(dir.TrimEnd('/')).ToUpper()))
                                {
                                    if (exclusiveDirFilter == null || !exclusiveDirFilter.IsMatch(STEM.Sys.IO.Path.GetFileName(dir.TrimEnd('/')).ToUpper()))
                                    {
                                        if (inclusiveFileFilter == null || inclusiveFileFilter.IsMatch(STEM.Sys.IO.Path.GetFileName(path).ToUpper()))
                                        {
                                            if (exclusiveFileFilter == null || !exclusiveFileFilter.IsMatch(STEM.Sys.IO.Path.GetFileName(path).ToUpper()))
                                            {
                                                ret.Add(blob);
                                            }
                                        }
                                    }
                                }
                            }
                        }
                        else if (blob is CloudBlobDirectory)
                        {
                            string dir = ToString(blob);

                            if (inclusiveDirFilter == null || inclusiveDirFilter.IsMatch(STEM.Sys.IO.Path.GetFileName(dir.TrimEnd('/')).ToUpper()))
                            {
                                if (exclusiveDirFilter == null || !exclusiveDirFilter.IsMatch(STEM.Sys.IO.Path.GetFileName(dir.TrimEnd('/')).ToUpper()))
                                {
                                    if (listType == AzureListType.Directory || listType == AzureListType.All)
                                    {
                                        ret.Add(blob);
                                    }

                                    if (recurse)
                                    {
                                        string p = ToString(blob);
                                        ret.AddRange(ListObjects(ContainerFromPath(p), PrefixFromPath(p), listType, recurse, directoryFilter, fileFilter));
                                    }
                                }
                            }
                        }
                    }
                }

                return(ret);
            }

            foreach (IListBlobItem blob in ListBlobs(containerName, directory))
            {
                if (blob is CloudBlockBlob)
                {
                    if (listType == AzureListType.File || listType == AzureListType.All)
                    {
                        string path = ToString(blob);
                        string dir  = STEM.Sys.IO.Path.GetDirectoryName(path);

                        if (inclusiveDirFilter == null || inclusiveDirFilter.IsMatch(STEM.Sys.IO.Path.GetFileName(dir.TrimEnd('/')).ToUpper()))
                        {
                            if (exclusiveDirFilter == null || !exclusiveDirFilter.IsMatch(STEM.Sys.IO.Path.GetFileName(dir.TrimEnd('/')).ToUpper()))
                            {
                                if (inclusiveFileFilter == null || inclusiveFileFilter.IsMatch(STEM.Sys.IO.Path.GetFileName(path).ToUpper()))
                                {
                                    if (exclusiveFileFilter == null || !exclusiveFileFilter.IsMatch(STEM.Sys.IO.Path.GetFileName(path).ToUpper()))
                                    {
                                        ret.Add(blob);
                                    }
                                }
                            }
                        }
                    }
                }
                else if (blob is CloudBlobDirectory)
                {
                    string dir = ToString(blob);

                    if (inclusiveDirFilter == null || inclusiveDirFilter.IsMatch(STEM.Sys.IO.Path.GetFileName(dir.TrimEnd('/')).ToUpper()))
                    {
                        if (exclusiveDirFilter == null || !exclusiveDirFilter.IsMatch(STEM.Sys.IO.Path.GetFileName(dir.TrimEnd('/')).ToUpper()))
                        {
                            if (listType == AzureListType.Directory || listType == AzureListType.All)
                            {
                                ret.Add(blob);
                            }

                            if (recurse)
                            {
                                string p = ToString(blob);
                                ret.AddRange(ListObjects(ContainerFromPath(p), PrefixFromPath(p), listType, recurse, directoryFilter, fileFilter));
                            }
                        }
                    }
                }
            }

            return(ret);
        }