コード例 #1
0
        static async Task Main(string[] args)
        {
            var jsonSerializer        = new Serializers.JsonSerializer(new JsonSerializerSettings());
            var fileStorageProvider   = new LocalStorageProvider(@".\");
            var memoryStorageProvider = new MemoryStorageProvider();

            var rawFileStorage   = new RawStorageClient(fileStorageProvider);
            var rawMemoryStorage = new RawStorageClient(memoryStorageProvider);

            var fileStorage   = new ObjectStorageClient(rawFileStorage, jsonSerializer);
            var memoryStorage = new ObjectStorageClient(rawMemoryStorage, jsonSerializer);

            Console.WriteLine("object memory storage");
            await TryStorage("test", memoryStorage);

            Console.WriteLine("object file storage");
            await TryStorage("test", fileStorage);

            Console.WriteLine("raw file storage");
            await TryRawStorage("test", rawFileStorage);

            Console.WriteLine("raw memory storage");
            await TryRawStorage("test", rawMemoryStorage);

            Console.WriteLine("Concurrent writes and reads");

            var tasks = Enumerable.Repeat(Enumerable.Range(1, 3).ToList(), 3)
                        .SelectMany(x => x)
                        .Select(x => TryRawStorage(x.ToString(), rawMemoryStorage));

            await Task.WhenAll(tasks);
        }
コード例 #2
0
 protected override void ProcessRecord()
 {
     base.ProcessRecord();
     try
     {
         client?.Dispose();
         int timeout = GetPreferredTimeout();
         WriteDebug($"Cmdlet Timeout : {timeout} milliseconds.");
         client = new ObjectStorageClient(AuthProvider, new Oci.Common.ClientConfiguration
         {
             RetryConfiguration = retryConfig,
             TimeoutMillis      = timeout,
             ClientUserAgent    = PSUserAgent
         });
         string region = GetPreferredRegion();
         if (region != null)
         {
             WriteDebug("Choosing Region:" + region);
             client.SetRegion(region);
         }
         if (Endpoint != null)
         {
             WriteDebug("Choosing Endpoint:" + Endpoint);
             client.SetEndpoint(Endpoint);
         }
     }
     catch (Exception ex)
     {
         TerminatingErrorDuringExecution(ex);
     }
 }
コード例 #3
0
        /// <summary>
        /// すべてのバケットを取得する
        /// </summary>
        /// <param name="nameSpaceName"></param>
        /// <param name="compartmentId"></param>
        /// <returns></returns>
        public IEnumerable <BucketInfo> GetAllBuckets(string nameSpaceName, string compartmentId)
        {
            List <BucketInfo> res = new List <BucketInfo>();

            var regions = GetRegions();
            var request = new ListBucketsRequest {
                NamespaceName = nameSpaceName, CompartmentId = compartmentId, Limit = 10
            };

            Parallel.ForEach(regions, region => {
                ObjectStorageClient objectStorageClient = new ObjectStorageClient(ClientConfig);
                objectStorageClient.SetRegion(region.RegionName);
                while (true)
                {
                    var buckets = objectStorageClient.ListBuckets(request);

                    foreach (var item in buckets.Items)
                    {
                        res.Add(new BucketInfo()
                        {
                            Name = item.Name, Region = region.RegionName, Id = item.Id, ModifiedTime = item.TimeCreated
                        });
                    }

                    if (string.IsNullOrEmpty(buckets.OpcNextPage))
                    {
                        break;
                    }

                    request.Page = buckets.OpcNextPage;
                }
            });

            return(res);
        }
コード例 #4
0
        public static List <ObjectSummary> GetUsageReportNames(ClientConfig config, ObjectStorageClient client, string startName = "")
        {
            List <ObjectSummary> res = new List <ObjectSummary>();

            client.SetRegion(Regions.US_ASHBURN_1);
            var listORequest = new ListObjectsRequest()
            {
                NamespaceName = "bling",
                BucketName    = config.TenancyId,
                Fields        = new List <string>()
                {
                    "name"
                },
                Start = startName,
                Limit = 10
            };
            var reports = client.ListObjects(listORequest);

            res.AddRange(reports.ListObjects.Objects);

            if (!string.IsNullOrEmpty(reports.ListObjects.NextStartWith))
            {
                res.AddRange(GetUsageReportNames(config, client, reports.ListObjects.NextStartWith));
            }

            return(res);
        }
コード例 #5
0
        public static async Task <GetObjectResponse> GetObjectExample(ObjectStorageClient osClient)
        {
            var getObjectObjectRequest = new GetObjectRequest()
            {
                BucketName    = Environment.GetEnvironmentVariable("BUCKET_NAME"),
                NamespaceName = Environment.GetEnvironmentVariable("NAMESPACE_NAME"),
                ObjectName    = Environment.GetEnvironmentVariable("OBJECT_NAME"),
                Range         = new Common.Model.Range()
                {
                    StartByte = 2,
                    EndByte   = 10
                }
            };

            try
            {
                var response = await osClient.GetObject(getObjectObjectRequest);

                logger.Info($"Get Object is successful: " + response.ETag);

                var fileContents = new StreamReader(response.InputStream).ReadToEnd();
                logger.Info($"file contents: {fileContents}");

                logger.Info($"Range: Start Index: {response.ContentRange.StartByte}, End Index: {response.ContentRange.EndByte}");

                return(response);
            }
            catch (Exception e)
            {
                logger.Error($"Failed at GetObjectExample:\n{e}");
                throw;
            }
        }
コード例 #6
0
 public MultipartTransferManager(MultipartManifest manifest,
                                 ObjectStorageClient osClient,
                                 SemaphoreSlim executor,
                                 CancellationToken cancellationToken   = default,
                                 RetryConfiguration retryConfiguration = null)
 {
     this.Manifest            = manifest;
     this.OSClient            = osClient;
     this.Executor            = executor;
     this._cancellationToken  = cancellationToken;
     this._retryConfiguration = retryConfiguration;
 }
コード例 #7
0
        private static async Task TryStorage(string key, ObjectStorageClient fileStorage)
        {
            Model model = new Model {
                Value = 5
            };

            Console.WriteLine($"thread [{Thread.CurrentThread.ManagedThreadId}] wrote message: [{model}] to key [{key}].");

            await fileStorage.WriteAsync(key, model);

            model = await fileStorage.ReadAsync <Model>(key);

            Console.WriteLine($"thread [{Thread.CurrentThread.ManagedThreadId}] read message: [{model}] from key [{key}].");
        }
コード例 #8
0
        public static void PutObject(ClientConfig config, string namespaceName, ObjectStorageClient client)
        {
            string targetBucketName = "TestBucket";
            string fileName         = "HelloWorld.txt";

            // Test file create
            using (var streamWriter = new StreamWriter(fileName))
            {
                streamWriter.WriteLine("hello world");
            }

            // put
            PutObjectRequest putObjectRequest = new PutObjectRequest
            {
                NamespaceName = namespaceName,
                BucketName    = targetBucketName,
                ObjectName    = fileName
            };
            PutObjectResponse updateRes;

            using (FileStream stream = new FileStream(fileName, FileMode.Open))
            {
                putObjectRequest.UploadPartBody = stream;

                updateRes = client.PutObject(putObjectRequest);
            }

            // rename
            RenameObjectRequest renameObjectRequest = new RenameObjectRequest
            {
                NamespaceName       = namespaceName,
                BucketName          = targetBucketName,
                RenameObjectDetails = new RenameObjectDetails {
                    SourceName = fileName,
                    NewName    = "NewName.txt"
                }
            };
            var renameRes = client.RenameObject(renameObjectRequest);

            // delete
            DeleteObjectRequest deleteObjectRequest = new DeleteObjectRequest
            {
                NamespaceName = namespaceName,
                BucketName    = targetBucketName,
                ObjectName    = "NewName.txt",
                IfMatch       = renameRes.ETag
            };
            var deleteRes = client.DeleteObject(deleteObjectRequest);
        }
コード例 #9
0
        public static async Task MainUploadManager()
        {
            logger.Info("Starting Upload Manager Example");
            var provider = new ConfigFileAuthenticationDetailsProvider("DEFAULT");
            var osClient = new ObjectStorageClient(provider, new ClientConfiguration()
            {
                TimeoutMillis = 1000 * 1000 // 1000 secs. Setting large timeouts is required for uploading large objects to avoid httpclient timeout exceptions.
            });

            var putObjectRequest = new PutObjectRequest()
            {
                BucketName    = Environment.GetEnvironmentVariable("BUCKET_NAME"),
                NamespaceName = Environment.GetEnvironmentVariable("NAMESPACE_NAME"),
                ObjectName    = Environment.GetEnvironmentVariable("OBJECT_NAME"),
                PutObjectBody = System.IO.File.OpenRead(Environment.GetEnvironmentVariable("FILE_TO_UPLOAD")),
                ContentLength = Convert.ToInt64(Environment.GetEnvironmentVariable("CONTENT_LENGTH")),
                ContentType   = Environment.GetEnvironmentVariable("CONTENT_TYPE")
            };

            var uploadConfiguration = new UploadConfiguration()
            {
                AllowMultipartUploads = true
            };

            var uploadManager = new UploadManager(osClient, uploadConfiguration);
            var uploadRequest = new UploadManager.UploadRequest(putObjectRequest)
            {
                AllowOverwrite = true,
                OnProgress     = OnProgres
            };

            var uploadResponse = await uploadManager.Upload(uploadRequest);

            logger.Info(uploadResponse);

            var headObject = await osClient.HeadObject(new HeadObjectRequest()
            {
                BucketName    = Environment.GetEnvironmentVariable("BUCKET_NAME"),
                NamespaceName = Environment.GetEnvironmentVariable("NAMESPACE_NAME"),
                ObjectName    = Environment.GetEnvironmentVariable("OBJECT_NAME")
            });

            logger.Info($"{headObject.ETag}");
            osClient.Dispose();
        }
コード例 #10
0
 public MultipartObjectAssembler(ObjectStorageClient service,
                                 string namespaceName, string bucketName, string objectName,
                                 bool allowOverwrite,
                                 SemaphoreSlim executor,
                                 string opcClientRequestId,
                                 bool enforceContentMD5Upload          = false,
                                 RetryConfiguration retryConfiguration = null)
 {
     _service                 = service;
     _namespaceName           = namespaceName;
     _bucketName              = bucketName;
     _objectName              = objectName;
     _allowOverwrite          = allowOverwrite;
     _executorServiceToUse    = executor;
     _retryConfiguration      = retryConfiguration;
     _opcClientRequestId      = opcClientRequestId;
     _enforceContentMD5Upload = enforceContentMD5Upload;
     _tokenSource             = new CancellationTokenSource();
 }
コード例 #11
0
        public static async Task MainOS()
        {
            logger.Info("Starting Object Storage Examples");

            var provider = new ConfigFileAuthenticationDetailsProvider("DEFAULT");
            var osClient = new ObjectStorageClient(provider, new ClientConfiguration());

            try
            {
                await PutObjectExample(osClient);
                await GetObjectExample(osClient);
            }
            catch (Exception e)
            {
                logger.Error($"Failed ObjectStorage example: {e.Message}");
            }
            finally
            {
                osClient.Dispose();
            }
        }
        public static void ClassInitialize(TestContext testContext)
        {
            ClientConfig clientConfig = new ClientConfig
            {
                TenancyId            = TenantOCID,
                UserId               = UserOCID,
                Fingerprint          = Fingerprint,
                PrivateKey           = KeyFilePath,
                Password             = PassPhrase,
                PrivateKeyPassphrase = PassPhrase
            };
            var signer = new ThreadSafeSigner(new OciSigner(clientConfig));

            ObjectStorageClient objectStorageClient = new ObjectStorageClient(clientConfig, signer)
            {
                Region = Region
            };

            ObjectStorageClient = objectStorageClient;

            NameSpaceName = ObjectStorageClient.GetNamespace(new GetNamespaceRequest());
        }
コード例 #13
0
        public static void DisplayUsageReport(ClientConfig config, ObjectStorageClient client)
        {
            // UsageReport
            // Example policy:
            // define tenancy usage-report as ocid1.tenancy.oc1..aaaaaaaaned4fkpkisbwjlr56u7cj63lf3wffbilvqknstgtvzub7vhqkggq
            // endorse group group_name to read objects in tenancy usage-report
            try
            {
                var reports = GetUsageReportNames(config, client);
                Console.WriteLine($"* UsageReport------------------------");
                reports.ForEach(r =>
                {
                    Console.WriteLine($"  {r.Name}");

                    /*
                     * // download object
                     * if (!Directory.Exists("./ExampleDownload/report"))
                     * {
                     *  Directory.CreateDirectory("./ExampleDownload/report");
                     * }
                     *
                     * if (!File.Exists($"./ExampleDownload/report/{r.Name.Replace('/', '_')}"))
                     * {
                     *  var getObjectRequest = new GetObjectRequest()
                     *  {
                     *      NamespaceName = "bling",
                     *      BucketName = config.TenancyId,
                     *      ObjectName = r.Name,
                     *  };
                     *  client.DownloadObject(getObjectRequest, "./ExampleDownload/report/", r.Name.Replace('/', '_'));
                     * }*/
                });
            }
            catch (Exception e)
            {
                Console.WriteLine($"Does not meet UsageReport usage requirements. message:{e.Message}");
            }
        }
コード例 #14
0
        public static void ClassInitialize(TestContext testContext)
        {
            foreach (var dir in TestFileInfos.Keys)
            {
                foreach (var fileName in TestFileInfos[dir])
                {
                    if (string.IsNullOrEmpty(dir))
                    {
                        TestFileRemotePaths.Add(fileName);
                    }
                    else
                    {
                        TestFileRemotePaths.Add($"{dir}/{fileName}");
                    }
                }
            }

            ClientConfig clientConfig = new ClientConfig
            {
                TenancyId            = TenantOCID,
                UserId               = UserOCID,
                Fingerprint          = Fingerprint,
                PrivateKey           = KeyFilePath,
                Password             = PassPhrase,
                PrivateKeyPassphrase = PassPhrase
            };

            var signer = new ThreadSafeSigner(new OciSigner(clientConfig));

            ObjectStorageClient objectStorageClient = new ObjectStorageClient(clientConfig, signer)
            {
                Region = Region
            };

            ObjectStorageClient = objectStorageClient;

            NameSpaceName = ObjectStorageClient.GetNamespace(new GetNamespaceRequest());
        }
コード例 #15
0
        public static async Task <PutObjectResponse> PutObjectExample(ObjectStorageClient osClient)
        {
            var putObjectRequest = new PutObjectRequest()
            {
                BucketName    = Environment.GetEnvironmentVariable("BUCKET_NAME"),
                NamespaceName = Environment.GetEnvironmentVariable("NAMESPACE_NAME"),
                ObjectName    = Environment.GetEnvironmentVariable("OBJECT_NAME"),
                PutObjectBody = GenerateStreamFromString("Hello World!!!!")
            };

            try
            {
                var response = await osClient.PutObject(putObjectRequest);

                logger.Info($"Put Object is successful: " + response.ETag);
                return(response);
            }
            catch (Exception e)
            {
                logger.Error($"Failed at PutObjectExample:\n{e}");
                throw;
            }
        }
コード例 #16
0
        public static void DisplayObjectStorage(ClientConfig config)
        {
            var client = new ObjectStorageClient(config)
            {
                Region = Regions.US_ASHBURN_1
            };

            // get namespace
            GetNamespaceRequest getNamespaceRequest = new GetNamespaceRequest();
            var namespaceName = client.GetNamespace(getNamespaceRequest);

            // get namespace metadata
            GetNamespaceMetadataRequest getNamespaceMetadataRequest = new GetNamespaceMetadataRequest()
            {
                NamespaceName = namespaceName
            };
            var namespaceMetadata = client.GetNamespaceMetadata(getNamespaceMetadataRequest).NamespaceMetadata;

            Console.WriteLine("* Namespace------------------------");
            Console.WriteLine($" namespace : {namespaceMetadata.Namespace}");
            Console.WriteLine($" defaultS3CompartmentId : {namespaceMetadata.DefaultS3CompartmentId}");
            Console.WriteLine($" defaultSwiftCompartmentId : {namespaceMetadata.DefaultSwiftCompartmentId}");

            // list bucket
            ListBucketsRequest listBucketsRequest = new ListBucketsRequest()
            {
                NamespaceName = namespaceName,
                CompartmentId = config.TenancyId
            };
            var listBucket = client.ListBuckets(listBucketsRequest);

            Console.WriteLine($"* Bucket------------------------");
            Console.WriteLine($" namespace : {namespaceName}");
            Console.WriteLine($" comaprtment : {config.TenancyId}");

            listBucket.Items.ForEach(bucket => {
                HeadBucketRequest headBucketRequest = new HeadBucketRequest()
                {
                    NamespaceName = bucket.Namespace,
                    BucketName    = bucket.Name
                };
                var buckethead = client.HeadBucket(headBucketRequest);

                // get bucket details
                GetBucketRequest getBucketRequest = new GetBucketRequest()
                {
                    NamespaceName = bucket.Namespace,
                    BucketName    = bucket.Name,
                    IfMatch       = buckethead.ETag
                };
                var bucketDetail = client.GetBucket(getBucketRequest);
                Console.WriteLine($"\t|- name : {bucketDetail.Bucket.Name}");
                Console.WriteLine($"\t|  timeCreated : {bucketDetail.Bucket.TimeCreated}");

                Console.WriteLine($"\t|* Object------------------------");
                ListObjectsRequest listObjectsRequest = new ListObjectsRequest()
                {
                    NamespaceName = bucketDetail.Bucket.Namespace,
                    BucketName    = bucketDetail.Bucket.Name
                };
                var Objs = client.ListObjects(listObjectsRequest);
                Objs.ListObjects.Objects.ForEach(obj => {
                    Console.WriteLine($"\t|\t|- name : {obj.Name}");

                    GetObjectRequest getObjectRequest = new GetObjectRequest()
                    {
                        NamespaceName = bucketDetail.Bucket.Namespace,
                        BucketName    = bucketDetail.Bucket.Name,
                        ObjectName    = obj.Name,
                    };
                    var ObjDetails = client.GetObject(getObjectRequest);
                    Console.WriteLine($"\t|\t|- contentLength : {ObjDetails.ContentLength}");

                    // download
                    if (!Directory.Exists("./ExampleDownload"))
                    {
                        Directory.CreateDirectory("./ExampleDownload");
                    }
                    if (!File.Exists($"./ExampleDownload/{obj.Name.Replace('/', '_')}"))
                    {
                        client.DownloadObject(getObjectRequest, "./ExampleDownload/", obj.Name.Replace('/', '_'));
                    }
                });
            });

            // UsageReport
            // Example policy:
            // define tenancy usage-report as ocid1.tenancy.oc1..aaaaaaaaned4fkpkisbwjlr56u7cj63lf3wffbilvqknstgtvzub7vhqkggq
            // endorse group group_name to read objects in tenancy usage-report
            try
            {
                var listORequest = new ListObjectsRequest()
                {
                    NamespaceName = "bling",
                    BucketName    = config.TenancyId
                };
                var reports = client.ListObjects(listORequest);
                Console.WriteLine($"* UsageReport------------------------");
                reports.ListObjects.Objects.ForEach(r =>
                {
                    Console.WriteLine($"  {r.Name}");
                    if (!Directory.Exists("./ExampleDownload/report"))
                    {
                        Directory.CreateDirectory("./ExampleDownload/report");
                    }

                    // download object

                    /*
                     * if (!File.Exists($"./ExampleDownload/report/{r.Name.Replace('/', '_')}"))
                     * {
                     *  var getObjectRequest = new GetObjectRequest()
                     *  {
                     *      NamespaceName = "bling",
                     *      BucketName = config.TenancyId,
                     *      ObjectName = r.Name,
                     *  };
                     *  client.DownloadObject(getObjectRequest, "./ExampleDownload/report/", r.Name.Replace('/', '_'));
                     * }*/
                });
            } catch (Exception e)
            {
                Console.WriteLine($"Does not meet UsageReport usage requirements. message:{e.Message}");
            }
        }
コード例 #17
0
 public ObjectStoragePaginators(ObjectStorageClient client)
 {
     this.client = client;
 }
コード例 #18
0
 public ObjectStorageWaiters(ObjectStorageClient client)
 {
     this.client = client;
 }
コード例 #19
0
        public static void DisplayObjectStorage(ClientConfig config)
        {
            var client = new ObjectStorageClient(config)
            {
                Region = Regions.US_ASHBURN_1
            };

            var identityClient = new IdentityClient(config)
            {
                Region = Regions.US_ASHBURN_1
            };

            // get namespace
            GetNamespaceRequest getNamespaceRequest = new GetNamespaceRequest();
            var namespaceName = client.GetNamespace(getNamespaceRequest);

            // get namespace metadata
            GetNamespaceMetadataRequest getNamespaceMetadataRequest = new GetNamespaceMetadataRequest()
            {
                NamespaceName = namespaceName
            };
            var namespaceMetadata = client.GetNamespaceMetadata(getNamespaceMetadataRequest).NamespaceMetadata;

            Console.WriteLine("* Namespace------------------------");
            Console.WriteLine($" namespace : {namespaceMetadata.Namespace}");
            Console.WriteLine($" defaultS3CompartmentId : {namespaceMetadata.DefaultS3CompartmentId}");
            Console.WriteLine($" defaultSwiftCompartmentId : {namespaceMetadata.DefaultSwiftCompartmentId}");

            Console.WriteLine();
            Console.WriteLine("ObjectStorage Example Menu");
            Console.WriteLine("[1]: Display List");
            Console.WriteLine("[2]: Upload Example");
            Console.WriteLine("[3]: UsageReport Example");
            Console.WriteLine("[ESC] or [E(e)] : Back Example Menu");
            Console.WriteLine();

            var presskey = Console.ReadKey(true);

            if (presskey.Key == ConsoleKey.Escape || presskey.KeyChar == 'E' || presskey.KeyChar == 'e')
            {
                Console.WriteLine("Back Example Menu");
                return;
            }
            var select = presskey.KeyChar;

            if (!int.TryParse(select.ToString(), out int mode))
            {
                Console.WriteLine("Incorrect input...");
                return;
            }

            if (mode == 1)
            {
                DisplayBucketAndObject(config, namespaceName, client, identityClient);
            }
            else if (mode == 2)
            {
                PutObject(config, namespaceName, client);
            }
            else if (mode == 3)
            {
                DisplayUsageReport(config, client);
            }
            else
            {
                Console.WriteLine("Incorrect input...");
                return;
            }
        }
コード例 #20
0
        public static void DisplayBucketAndObject(ClientConfig config, string namespaceName, ObjectStorageClient client, IdentityClient identityClient)
        {
            // Compartment required only to get a bucket
            var listCompartmentRequest = new ListCompartmentRequest()
            {
                CompartmentId          = config.TenancyId,
                CompartmentIdInSubtree = true,
                AccessLevel            = ListCompartmentRequest.AccessLevels.ACCESSIBLE
            };
            var compartments = identityClient.ListCompartment(listCompartmentRequest).Items;

            // root(tenant) add
            compartments.Add(new OCISDK.Core.Identity.Model.Compartment {
                Id = config.TenancyId, Name = "root"
            });

            foreach (var compartment in compartments)
            {
                Console.WriteLine($"## Compartment<{compartment.Name}>--------");

                // list bucket
                ListBucketsRequest listBucketsRequest = new ListBucketsRequest()
                {
                    NamespaceName = namespaceName,
                    CompartmentId = compartment.Id
                };
                var listBucket = client.ListBuckets(listBucketsRequest);
                Console.WriteLine($"* Bucket------------------------");
                Console.WriteLine($" namespace : {namespaceName}");
                Console.WriteLine($" comaprtment : {config.TenancyId}");

                listBucket.Items.ForEach(bucket =>
                {
                    HeadBucketRequest headBucketRequest = new HeadBucketRequest()
                    {
                        NamespaceName = bucket.Namespace,
                        BucketName    = bucket.Name
                    };
                    var buckethead = client.HeadBucket(headBucketRequest);

                    // get bucket details
                    GetBucketRequest getBucketRequest = new GetBucketRequest()
                    {
                        NamespaceName = bucket.Namespace,
                        BucketName    = bucket.Name,
                        IfMatch       = buckethead.ETag
                    };
                    var bucketDetail = client.GetBucket(getBucketRequest);
                    Console.WriteLine($"\t|- * name : {bucketDetail.Bucket.Name}");
                    Console.WriteLine($"\t|    timeCreated : {bucketDetail.Bucket.TimeCreated}");

                    // Bucket workrequests
                    ListWorkRequestsRequest listWorkRequestsRequest = new ListWorkRequestsRequest
                    {
                        CompartmentId = bucketDetail.Bucket.CompartmentId,
                        BucketName    = bucket.Name
                    };
                    var wrs = client.ListWorkRequests(listWorkRequestsRequest);
                    Console.WriteLine($"\t|* WorkRequest------------------------");
                    foreach (var wr in wrs.Items)
                    {
                        Console.WriteLine($"\t|\t|- name : {wr.OperationType}");
                        Console.WriteLine($"\t|\t|- status : {wr.Status}");
                        Console.WriteLine($"\t|\t|- start : {wr.TimeStarted}");
                        Console.WriteLine($"\t|\t|- finish : {wr.TimeFinished}");
                    }

                    // objects
                    Console.WriteLine($"\t|* Object------------------------");
                    ListObjectsRequest listObjectsRequest = new ListObjectsRequest()
                    {
                        NamespaceName = bucketDetail.Bucket.Namespace,
                        BucketName    = bucketDetail.Bucket.Name,
                        Fields        = new List <string> {
                            "size", "timeCreated", "md5"
                        }
                    };
                    var Objs = client.ListObjects(listObjectsRequest);
                    Objs.ListObjects.Objects.ForEach(obj =>
                    {
                        Console.WriteLine($"\t|\t|- name : {obj.Name}");

                        GetObjectRequest getObjectRequest = new GetObjectRequest()
                        {
                            NamespaceName = bucketDetail.Bucket.Namespace,
                            BucketName    = bucketDetail.Bucket.Name,
                            ObjectName    = obj.Name,
                        };
                        var ObjDetails = client.GetObject(getObjectRequest);
                        Console.WriteLine($"\t|\t|- contentLength : {ObjDetails.ContentLength}");

                        // download

                        /*if (!Directory.Exists("./ExampleDownload"))
                         * {
                         *  Directory.CreateDirectory("./ExampleDownload");
                         * }
                         * if (!File.Exists($"./ExampleDownload/{obj.Name.Replace('/', '_')}"))
                         * {
                         *  client.DownloadObject(getObjectRequest, "./ExampleDownload/", obj.Name.Replace('/', '_'));
                         * }*/
                    });
                });
            }
        }
コード例 #21
0
 public UploadManager(ObjectStorageClient objectStorageClient, UploadConfiguration uploadConfiguration)
 {
     this._osClient      = objectStorageClient;
     this._configuration = uploadConfiguration;
 }
コード例 #22
0
        public static async Task MainOSBucketTagging()
        {
            string compartmentId = Environment.GetEnvironmentVariable("OCI_COMPARTMENT_ID");
            string bucketName    = Environment.GetEnvironmentVariable("BUCKET_NAME");
            string tagNamespace  = Environment.GetEnvironmentVariable("TAG_NAMESPACE");
            string tagName       = Environment.GetEnvironmentVariable("TAG_NAME");

            logger.Info("Starting example");
            // Create Object Storage Client
            var provider = new ConfigFileAuthenticationDetailsProvider("DEFAULT");
            var osClient = new ObjectStorageClient(provider, new ClientConfiguration());

            logger.Info("Object Storage client created.");

            GetNamespaceRequest getNamespaceRequest = new GetNamespaceRequest
            {
                CompartmentId = compartmentId
            };
            GetNamespaceResponse getNamespaceResponse = await osClient.GetNamespace(getNamespaceRequest);

            string nSpace = getNamespaceResponse.Value.Trim('"');

            logger.Info($"namespace is {nSpace}");

            /*
             * We can assign tags to a bucket at creation time. Like other taggable resources, we can
             * assign freeform and defined tags to a bucket. Freeform tags are a dictionary of
             * string-to-string, where the key is the tag name and the value is the tag value.
             *
             * Defined tags are a dictionary where the key is the tag namespace (string) and the value is another dictionary. In
             * this second dictionary, the key is the tag name (string) and the value is the tag value. The tag names have to
             * correspond to the name of a tag within the specified namespace (and the namespace must exist).
             */
            try
            {
                Dictionary <string, string> freeformTags = new Dictionary <string, string>()
                {
                    { "free", "form" },
                    { "another", "item" }
                };

                Dictionary <string, object> definedTagsMap = new Dictionary <string, object>()
                {
                    { tagName, "original value" }
                };

                Dictionary <string, Dictionary <string, object> > definedTags = new Dictionary <string, Dictionary <string, object> >()
                {
                    { tagNamespace, definedTagsMap }
                };

                CreateBucketDetails createBucketDetails = new CreateBucketDetails
                {
                    Name                = bucketName,
                    CompartmentId       = compartmentId,
                    FreeformTags        = freeformTags,
                    DefinedTags         = definedTags,
                    ObjectEventsEnabled = false
                };
                CreateBucketRequest createBucketRequest = new CreateBucketRequest
                {
                    CreateBucketDetails = createBucketDetails,
                    NamespaceName       = nSpace
                };
                CreateBucketResponse createBucketResponse = await osClient.CreateBucket(createBucketRequest);

                logger.Info($"Created a bucket with tags Bucket name: {createBucketResponse.Bucket.Name}");
                logger.Info("========================================");
                definedTags = createBucketResponse.Bucket.DefinedTags;
                foreach (KeyValuePair <string, Dictionary <string, object> > kvp in definedTags)
                {
                    foreach (KeyValuePair <string, object> tags in kvp.Value)
                    {
                        logger.Info($"tag key name: {tags.Key} and tag value is {tags.Value}");
                    }
                }

                // Tags come back when retrieving the bucket
                GetBucketRequest getBucketRequest = new GetBucketRequest
                {
                    NamespaceName = nSpace,
                    BucketName    = bucketName
                };
                GetBucketResponse getBucketResponse = await osClient.GetBucket(getBucketRequest);

                logger.Info($"Retrieved a bucket with tags Bucket name: {getBucketResponse.Bucket.Name}");
                logger.Info("==========================================");
                definedTags = getBucketResponse.Bucket.DefinedTags;
                foreach (KeyValuePair <string, Dictionary <string, object> > kvp in definedTags)
                {
                    foreach (KeyValuePair <string, object> tags in kvp.Value)
                    {
                        logger.Info($"tag key name: {tags.Key} and tag value is {tags.Value}");
                    }
                }

                /*
                 * Unlike other resources (e.g. instances, VCNs, and block volumes), when listing buckets
                 * tags are not returned by default. Instead, you need to provide a value to the fields
                 * parameter when listing buckets in order to have those tags returned.
                 *
                 * Here we can see the result of providing and not providing that parameter.
                 */
                ListBucketsRequest listBucketsRequest = new ListBucketsRequest
                {
                    CompartmentId = compartmentId,
                    NamespaceName = nSpace
                };
                IEnumerable <BucketSummary> bucketSummaries = osClient.Paginators.ListBucketsRecordEnumerator(listBucketsRequest);
                foreach (BucketSummary bucketSummary in bucketSummaries)
                {
                    if (bucketSummary.Name.Equals(bucketName))
                    {
                        logger.Info($"Bucket summary without tags: Bucket Name: {bucketSummary.Name}");
                        logger.Info("=========================================");
                        if (bucketSummary.DefinedTags != null)
                        {
                            logger.Error($"expected tags to be zero but got: {bucketSummary.DefinedTags.Count}");
                        }
                        break;
                    }
                }

                List <ListBucketsRequest.FieldsEnum> fields = new List <ListBucketsRequest.FieldsEnum>()
                {
                    ListBucketsRequest.FieldsEnum.Tags
                };

                listBucketsRequest = new ListBucketsRequest
                {
                    CompartmentId = compartmentId,
                    NamespaceName = nSpace,
                    Fields        = fields
                };
                bucketSummaries = osClient.Paginators.ListBucketsRecordEnumerator(listBucketsRequest);
                foreach (BucketSummary bucketSummary in bucketSummaries)
                {
                    if (bucketSummary.Name.Equals(bucketName))
                    {
                        logger.Info($"Bucket summary with tags: Bucket Name: {bucketSummary.Name}");
                        logger.Info("======================================");
                        definedTags = bucketSummary.DefinedTags;
                        foreach (KeyValuePair <string, Dictionary <string, object> > kvp in definedTags)
                        {
                            foreach (KeyValuePair <string, object> tags in kvp.Value)
                            {
                                logger.Info($"tag key name: {tags.Key} and tag value is {tags.Value}");
                            }
                        }
                    }
                }

                /*
                 * We can also update tags on a bucket. Note that this is a total replacement for any
                 * previously set freeform or defined tags.
                 */
                Dictionary <string, string> updateFreeformTags = new Dictionary <string, string>()
                {
                    { "new", "freeform" }
                };

                Dictionary <string, object> updateDefinedTagsMap = new Dictionary <string, object>()
                {
                    { tagName, "replaced" }
                };
                Dictionary <string, Dictionary <string, object> > updateDefinedTags = new Dictionary <string, Dictionary <string, object> >()
                {
                    { tagNamespace, updateDefinedTagsMap }
                };

                UpdateBucketDetails updateBucketDetails = new UpdateBucketDetails
                {
                    Name         = bucketName,
                    FreeformTags = updateFreeformTags,
                    DefinedTags  = updateDefinedTags
                };
                UpdateBucketRequest updateBucketRequest = new UpdateBucketRequest
                {
                    NamespaceName       = nSpace,
                    BucketName          = bucketName,
                    UpdateBucketDetails = updateBucketDetails
                };
                UpdateBucketResponse updateBucketResponse = await osClient.UpdateBucket(updateBucketRequest);

                logger.Info($"Updated the bucket with new tags Bucket name: {updateBucketResponse.Bucket.Name}");
                logger.Info("==============================================");
                definedTags = updateBucketResponse.Bucket.DefinedTags;
                foreach (KeyValuePair <string, Dictionary <string, object> > kvp in definedTags)
                {
                    foreach (KeyValuePair <string, object> tags in kvp.Value)
                    {
                        logger.Info($"tag key name: {tags.Key} and tag value is {tags.Value}");
                    }
                }

                updateBucketDetails = new UpdateBucketDetails
                {
                    Name         = bucketName,
                    FreeformTags = new Dictionary <string, string>(),
                    DefinedTags  = new Dictionary <string, Dictionary <string, object> >()
                };
                updateBucketRequest = new UpdateBucketRequest
                {
                    NamespaceName       = nSpace,
                    BucketName          = bucketName,
                    UpdateBucketDetails = updateBucketDetails
                };
                updateBucketResponse = await osClient.UpdateBucket(updateBucketRequest);

                logger.Info($"cleared the tags for the bucket: {updateBucketResponse.Bucket.Name}");
                logger.Info("=================================");

                // Clean up
                DeleteBucketRequest deleteBucketRequest = new DeleteBucketRequest
                {
                    NamespaceName = nSpace,
                    BucketName    = bucketName
                };
                await osClient.DeleteBucket(deleteBucketRequest);

                logger.Info("Deleted the bucket");
                logger.Info("Ending example.");
            }
            catch (Exception e)
            {
                logger.Error($"Failed Object Storage example: {e.Message}");
            }
            finally
            {
                osClient.Dispose();
            }
        }
コード例 #23
0
        public static void Example(ClientConfig config)
        {
            ThreadSafeSigner threadSafeSigner = new ThreadSafeSigner(new OciSigner(config));
            var client = new ObjectStorageClient(config, threadSafeSigner)
            {
                Region = Regions.AP_TOKYO_1
            };

            var identityClient = new IdentityClient(config, threadSafeSigner)
            {
                Region = Regions.AP_TOKYO_1
            };

            var nameSpaceName = client.GetNamespace(new GetNamespaceRequest());

            // Compartment required only to get a bucket
            var listCompartmentRequest = new ListCompartmentRequest()
            {
                CompartmentId          = config.TenancyId,
                CompartmentIdInSubtree = true,
                AccessLevel            = ListCompartmentRequest.AccessLevels.ACCESSIBLE
            };

            var compartments = identityClient.ListCompartment(listCompartmentRequest).Items;

            // root(tenant) add
            compartments.Add(new OCISDK.Core.Identity.Model.Compartment {
                Id = config.TenancyId, Name = "root"
            });

            foreach (var compartment in compartments)
            {
                ListBucketsRequest listBucketsRequest = new ListBucketsRequest
                {
                    NamespaceName = nameSpaceName,
                    CompartmentId = compartment.Id,
                    Limit         = 10
                };
                var bukcets = client.ListBuckets(listBucketsRequest);

                foreach (var bukcet in bukcets.Items)
                {
                    ObjectStorageDirectoryInfo directoryInfo = new ObjectStorageDirectoryInfo(client, nameSpaceName, bukcet.Name);

                    Console.WriteLine($"* {bukcet.Name}");

                    // top files
                    var files = directoryInfo.EnumerateFiles("*", System.IO.SearchOption.TopDirectoryOnly);
                    foreach (var file in files)
                    {
                        Console.WriteLine($"\t|- {file.Name}");
                    }

                    // top directories and files
                    var topDirs = directoryInfo.EnumerateDirectories("*", System.IO.SearchOption.TopDirectoryOnly);

                    foreach (var dir in topDirs)
                    {
                        Console.WriteLine($"\t|- {dir.Name}");
                        files = dir.EnumerateFiles("*", System.IO.SearchOption.TopDirectoryOnly);

                        foreach (var file in files)
                        {
                            Console.WriteLine($"\t|\t|- {file.Name}");
                        }

                        // sub directories and files
                        var subDirInfo = new ObjectStorageDirectoryInfo(client, nameSpaceName, bukcet.Name, dir.Name + "/");
                        var subDirs    = subDirInfo.EnumerateDirectories("*", System.IO.SearchOption.TopDirectoryOnly);

                        foreach (var sub in subDirs)
                        {
                            Console.WriteLine($"\t|\t|- {sub.Name}");
                            files = sub.EnumerateFiles("*", System.IO.SearchOption.TopDirectoryOnly);

                            foreach (var file in files)
                            {
                                Console.WriteLine($"\t|\t|\t|- {file.Name}");
                            }
                        }
                    }

                    foreach (var dir in topDirs)
                    {
                        // prefix directories
                        Console.WriteLine("TopDirectoryOnly prefix-----[" + dir.Name + "]");
                        var preDir   = new ObjectStorageDirectoryInfo(client, nameSpaceName, bukcet.Name, dir.Name);
                        var preFiles = preDir.EnumerateFiles("*", System.IO.SearchOption.TopDirectoryOnly);

                        foreach (var file in preFiles)
                        {
                            Console.WriteLine($"\t|- {file.FullName}");
                        }
                    }


                    foreach (var dir in topDirs)
                    {
                        // prefix directories
                        Console.WriteLine("AllDirectories prefix-----[" + dir.Name + "]");
                        var preDir   = new ObjectStorageDirectoryInfo(client, nameSpaceName, bukcet.Name, dir.Name);
                        var preFiles = preDir.EnumerateFiles("*", System.IO.SearchOption.AllDirectories);

                        foreach (var file in preFiles)
                        {
                            Console.WriteLine($"\t|- {file.FullName}");
                        }
                    }
                }
            }
        }