Example #1
0
        // Establish Credentials with AWS IAM Credentials in Environmental variables
        public async static Task Run()
        {
            AWSEnvironmentProvider provider    = new AWSEnvironmentProvider();
            MinioClient            minioClient = new MinioClient()
                                                 .WithEndpoint("s3.amazonaws.com")
                                                 .WithSSL()
                                                 .WithCredentialsProvider(provider)
                                                 .Build();

            try
            {
                StatObjectArgs statObjectArgs = new StatObjectArgs()
                                                .WithBucket("my-bucket-name")
                                                .WithObject("my-object-name");
                ObjectStat result = await minioClient.StatObjectAsync(statObjectArgs);

                Console.WriteLine("Object Stat: \n" + result.ToString());
            }
            catch (MinioException me)
            {
                Console.WriteLine($"[Bucket] IAMAWSProviderExample example case encountered Exception: {me}");
            }
            catch (Exception e)
            {
                Console.WriteLine($"[Bucket] IAMAWSProviderExample example case encountered Exception: {e}");
            }
        }
Example #2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="_minio"></param>
        /// <param name="bucketName"></param>
        /// <param name="objectName"></param>
        /// <param name="contentType"></param>
        /// <param name="fileName"></param>
        /// <param name="metaData"></param>
        /// <returns></returns>
        public async static Task <ObjectStat> PutObject_Tester(MinioClient _minio, string bucketName, string objectName, string contentType, string fileName = null, Dictionary <string, string> metaData = null)
        {
            int count = 0;
            IObservable <Item> observable = _minio.ListObjectsAsync(bucketName, "objectName", true);

            IDisposable subscription = observable.Subscribe(
                item =>
            {
                if (item.Key.StartsWith("device3"))
                {
                    count += 1;
                    Console.WriteLine($"count: {count}");
                }
            },
                ex => Console.WriteLine($"OnError: {ex}"),
                () => Console.WriteLine($"Listed all objects in bucket {bucketName}\n"));


            ObjectStat statObject = await _minio.StatObjectAsync(bucketName, "device3");

            //await _minio.PutObjectAsync(bucketName,objectName,objectName,contentType);

            Assert.IsNotNull(statObject);
            Assert.AreEqual(statObject.ObjectName, objectName);
            //Assert.AreEqual(statObject.Size, file_read_size);
            if (contentType != null)
            {
                Assert.AreEqual(statObject.ContentType, contentType);
            }
            return(statObject);
        }
Example #3
0
        public async static Task PutObject_Test1(MinioClient _minio, string bucketName, string objectName)
        {
            ObjectStat statObject = await _minio.StatObjectAsync(bucketName, objectName);

            Assert.IsNotNull(statObject);
            Assert.AreEqual(statObject.ObjectName, objectName);
        }
        // Establish Credentials with AWS Session token
        public async static Task Run()
        {
            ChainedProvider provider = new ChainedProvider()
                                       .AddProviders(new ClientProvider[] { new AWSEnvironmentProvider(), new MinioEnvironmentProvider() });
            //Chained provider definition here.
            MinioClient minioClient = new MinioClient()
                                      .WithEndpoint("s3.amazonaws.com")
                                      .WithSSL()
                                      .WithCredentialsProvider(provider)
                                      .Build();

            try
            {
                StatObjectArgs statObjectArgs = new StatObjectArgs()
                                                .WithBucket("my-bucket-name")
                                                .WithObject("my-object-name");
                ObjectStat result = await minioClient.StatObjectAsync(statObjectArgs);
            }
            catch (MinioException me)
            {
                Console.WriteLine($"[Bucket] ChainedCredentialProvider example case encountered Exception: {me}");
            }
            catch (Exception e)
            {
                Console.WriteLine($"[Bucket] ChainedCredentialProvider example case encountered Exception: {e}");
            }
        }
Example #5
0
        public async Task <ItemMeta> GetObjectMetadataAsync(string bucketName
                                                            , string objectName
                                                            , string versionID       = null
                                                            , string matchEtag       = null
                                                            , DateTime?modifiedSince = null)
        {
            if (string.IsNullOrEmpty(bucketName))
            {
                throw new ArgumentNullException(nameof(bucketName));
            }
            objectName = FormatObjectName(objectName);
            StatObjectArgs args = new StatObjectArgs()
                                  .WithBucket(bucketName)
                                  .WithObject(objectName)
                                  .WithVersionId(versionID)
                                  .WithMatchETag(matchEtag);

            if (modifiedSince.HasValue)
            {
                args = args.WithModifiedSince(modifiedSince.Value);
            }
            ObjectStat statObject = await _client.StatObjectAsync(args);

            return(new ItemMeta()
            {
                ObjectName = statObject.ObjectName,
                Size = statObject.Size,
                LastModified = statObject.LastModified,
                ETag = statObject.ETag,
                ContentType = statObject.ContentType,
                IsEnableHttps = Options.IsEnableHttps,
                MetaData = statObject.MetaData
            });
        }
Example #6
0
        // Get stats on a object
        public async static Task Run(MinioClient minio,
                                     string bucketName      = "my-bucket-name",
                                     string bucketObject    = "my-object-name",
                                     string versionID       = null,
                                     string matchEtag       = null,
                                     DateTime modifiedSince = default(DateTime))
        {
            try
            {
                Console.WriteLine("Running example for API: StatObjectAsync [with ObjectQuery]");

                StatObjectArgs args = new StatObjectArgs()
                                      .WithBucket(bucketName)
                                      .WithObject(bucketObject)
                                      .WithVersionId(versionID)
                                      .WithMatchETag(matchEtag)
                                      .WithModifiedSince(modifiedSince);
                ObjectStat statObjectVersion = await minio.StatObjectAsync(args);

                PrintStat(bucketObject, statObjectVersion);
            }
            catch (MinioException me)
            {
                string objectNameInfo = $"{bucketName}-{bucketObject}";
                if (!string.IsNullOrEmpty(versionID))
                {
                    objectNameInfo = objectNameInfo + $" (Version ID) {me.Response.VersionId} (Marked DEL) {me.Response.DeleteMarker}";
                }
                Console.WriteLine($"[StatObject] {objectNameInfo} Exception: {me}");
            }
            catch (Exception e)
            {
                Console.WriteLine($"[StatObject]  Exception: {e}");
            }
        }
Example #7
0
        private async static Task PresignedPutObject_Test1(MinioClient minio)
        {
            Console.Out.WriteLine("Test1: PresignedPutObjectAsync");
            string bucketName = GetRandomName(15);
            string objectName = GetRandomName(10);
            string fileName   = CreateFile(1 * MB);

            await Setup_Test(minio, bucketName);

            // Upload with presigned url
            string presigned_url = await minio.PresignedPutObjectAsync(bucketName, objectName, 1000);

            await UploadObjectAsync(presigned_url, fileName);

            // Get stats for object from server
            ObjectStat stats = await minio.StatObjectAsync(bucketName, objectName);

            // Compare with file used for upload
            FileInfo writtenInfo       = new FileInfo(fileName);
            long     file_written_size = writtenInfo.Length;

            Assert.AreEqual(file_written_size, stats.Size);

            await minio.RemoveObjectAsync(bucketName, objectName);

            await TearDown(minio, bucketName);

            File.Delete(fileName);
            Console.Out.WriteLine("Test1: PresignedPutObjectAsync Complete");
        }
Example #8
0
 internal StatObjectResponse(HttpStatusCode statusCode, string responseContent,
                             Dictionary <string, string> responseHeaders, StatObjectArgs args)
     : base(statusCode, responseContent)
 {
     // StatObjectResponse object is populated with available stats from the response.
     ObjectInfo = ObjectStat.FromResponseHeaders(args.ObjectName, responseHeaders);
 }
Example #9
0
        public async Task <IStorageObject> GetObject(string bucketName, string objectName, CancellationToken token = default)
        {
            ObjectStat stats = await StatObject(bucketName, objectName, token);

            if (stats is null)
            {
                return(null);
            }

            var stream = new MemoryStream();

            await _client.GetObjectAsync(bucketName, objectName, input =>
            {
                input.CopyTo(stream);
                stream.Seek(0, SeekOrigin.Begin);
                input.Dispose();
            }, cancellationToken : token);

            return(new StorageObject
            {
                ContentType = stats.ContentType,
                Data = stream,
                Metadata = StripPrefixes(stats.MetaData),
                Name = stats.ObjectName,
                Size = stats.Size,
                LastModified = stats.LastModified
            });
        }
    /// <summary>
    ///     private helper method to remove list of objects from bucket
    /// </summary>
    /// <param name="args">GetObjectArgs Arguments Object encapsulates information like - bucket name, object name etc </param>
    /// <param name="objectStat">
    ///     ObjectStat object encapsulates information like - object name, size, etag etc, represents
    ///     Object Information
    /// </param>
    /// <param name="cb"> Action object of type Stream, callback to send Object contents, if assigned </param>
    /// <param name="cancellationToken">Optional cancellation token to cancel the operation</param>
    private async Task getObjectStreamAsync(GetObjectArgs args, ObjectStat objectStat, Action <Stream> cb,
                                            CancellationToken cancellationToken = default)
    {
        var requestMessageBuilder = await CreateRequest(args).ConfigureAwait(false);

        using var response = await ExecuteTaskAsync(NoErrorHandlers, requestMessageBuilder, cancellationToken)
                             .ConfigureAwait(false);
    }
 public MinioObjectStatModel(ObjectStat ojectStat)
 {
     ObjectName   = ojectStat.ObjectName;
     Size         = ojectStat.Size;
     LastModified = ojectStat.LastModified;
     ETag         = ojectStat.ETag;
     ContentType  = ojectStat.ContentType;
     MetaData     = ojectStat.MetaData;
 }
Example #12
0
        private async static Task PutObject_Tester(MinioClient minio, string bucketName, string objectName, string fileName = null, string contentType = "application/octet-stream", long size = 0)
        {
            try
            {
                byte[] bs = File.ReadAllBytes(fileName);
                System.IO.MemoryStream filestream = new System.IO.MemoryStream(bs);

                long   file_write_size = filestream.Length;
                long   file_read_size  = 0;
                string tempFileName    = "tempfiletosavestream";
                if (size == 0)
                {
                    size = filestream.Length;
                }
                if (filestream.Length < (5 * MB))
                {
                    Console.Out.WriteLine("Test1: PutobjectAsync: PutObjectAsync with Stream");
                }
                else
                {
                    Console.Out.WriteLine("Test1: PutobjectAsync: PutObjectAsync with Stream and MultiPartUpload");
                }
                await minio.PutObjectAsync(bucketName,
                                           objectName,
                                           filestream,
                                           size,
                                           contentType);

                await minio.GetObjectAsync(bucketName, objectName,
                                           (stream) =>
                {
                    var fileStream = File.Create(tempFileName);
                    stream.CopyTo(fileStream);
                    fileStream.Dispose();
                    FileInfo writtenInfo = new FileInfo(tempFileName);
                    file_read_size       = writtenInfo.Length;

                    Assert.AreEqual(file_read_size, file_write_size);
                    File.Delete(tempFileName);
                });

                ObjectStat statObject = await minio.StatObjectAsync(bucketName, objectName);

                Assert.IsNotNull(statObject);
                Assert.AreEqual(statObject.ObjectName, objectName);
                Assert.AreEqual(statObject.Size, file_read_size);
                Assert.AreEqual(statObject.ContentType, contentType);

                await minio.RemoveObjectAsync(bucketName, objectName);
            }
            catch (Exception e)
            {
                Console.WriteLine("[Bucket]  Exception: {0}", e);
                Assert.Fail();
            }
        }
Example #13
0
    public static void PrintStat(string bucketObject, ObjectStat statObject)
    {
        var currentColor = Console.ForegroundColor;

        Console.WriteLine($"Details of the object {bucketObject} are");
        Console.ForegroundColor = ConsoleColor.DarkGreen;
        Console.WriteLine($"{statObject}");
        Console.ForegroundColor = currentColor;
        Console.WriteLine();
    }
Example #14
0
        public ObjectInfo(ObjectStat stat)
        {
            ObjectName   = stat.ObjectName;
            Size         = stat.Size;
            LastModified = stat.LastModified;
            ETag         = stat.ETag;
            ContentType  = stat.ContentType;
            MetaData     = stat.MetaData;

            // Not existent values.
            Expires = DateTime.MaxValue;
        }
Example #15
0
        private async static Task CopyObject_Test3(MinioClient minio)
        {
            Console.Out.WriteLine("Test3: CopyObjectsAsync");
            // Test CopyConditions where matching ETag is found
            string bucketName     = GetRandomName(15);
            string objectName     = GetRandomName(10);
            string destBucketName = GetRandomName(15);
            string destObjectName = GetRandomName(10);
            string fileName       = CreateFile(1 * MB);

            await Setup_Test(minio, bucketName);
            await Setup_Test(minio, destBucketName);

            await minio.PutObjectAsync(bucketName,
                                       objectName,
                                       fileName);

            ObjectStat stats = await minio.StatObjectAsync(bucketName, objectName);

            CopyConditions conditions = new CopyConditions();

            conditions.SetMatchETag(stats.ETag);
            try
            {
                await minio.CopyObjectAsync(bucketName, objectName, destBucketName, destObjectName, conditions);
            }
            catch (MinioException)
            {
                Assert.Fail();
            }

            string     outFileName = "outFileName";
            ObjectStat dstats      = await minio.StatObjectAsync(destBucketName, destObjectName);

            Assert.IsNotNull(dstats);
            Assert.AreEqual(dstats.ETag, stats.ETag);
            Assert.AreEqual(dstats.ObjectName, destObjectName);
            await minio.GetObjectAsync(destBucketName, destObjectName, outFileName);

            File.Delete(outFileName);

            await minio.RemoveObjectAsync(bucketName, objectName);

            await minio.RemoveObjectAsync(destBucketName, destObjectName);


            await TearDown(minio, bucketName);
            await TearDown(minio, destBucketName);

            File.Delete(fileName);
            Console.Out.WriteLine("Test3: CopyObjectsAsync Complete");
        }
Example #16
0
 // Get stats on a object
 public async static Task Run(Minio.MinioClient minio, 
                              string bucketName = "my-bucket-name",
                              string bucketObject="my-object-name")
 {
     try
     {
         Console.Out.WriteLine("Running example for API: StatObjectAsync");
         ObjectStat statObject = await minio.StatObjectAsync(bucketName, bucketObject);
         Console.Out.WriteLine("Details of the object " + bucketObject + " are " + statObject);
         Console.Out.WriteLine();
     }
     catch (Exception e)
     {
         Console.WriteLine("[StatObject] {0}-{1}  Exception: {2}",bucketName, bucketObject, e);
     }
 }
Example #17
0
        public void Properties()
        {
            var stat = new ObjectStat
            {
                BlockSize      = 1,
                CumulativeSize = 2,
                DataSize       = 3,
                LinkCount      = 4,
                LinkSize       = 5
            };

            Assert.AreEqual(1, stat.BlockSize);
            Assert.AreEqual(2, stat.CumulativeSize);
            Assert.AreEqual(3, stat.DataSize);
            Assert.AreEqual(4, stat.LinkCount);
            Assert.AreEqual(5, stat.LinkSize);
        }
Example #18
0
        private static async Task Run(MinioClient minio, string userBucketName, string uploadFilePath, string saveFileName)
        {
            var bucketName = userBucketName; //桶名
            var location   = "us-east-1";    //地址
            var filePath   = uploadFilePath; //上传文件路径
            //var objectName = "device1/"+"20210107/"+saveFileName;//保存文件名
            //var objectName = "device3" + "/" +levelTwo + "/" + saveFileName;
            var objectName  = "LK500" + "/" + DateTime.Now.ToShortDateString().ToString() + "/" + saveFileName;
            var contentType = ContentTypeHelper.GetContentType(saveFileName.Substring(saveFileName.LastIndexOf('.') + 1));
            var file        = new FileInfo(uploadFilePath);

            try
            {
                var found = await minio.BucketExistsAsync(bucketName);//判断是否存在桶名

                if (!found)
                {
                    await minio.MakeBucketAsync(bucketName, location);
                }

                _minioClient.SetTraceOn(new LogHelper());//我们在上传开始的时候,打开日志,通过日志抛出的块编号来计算出当前进度

                ViewModelLocator.FileUploadViewModel.FileSize   = file.Length;
                ViewModelLocator.FileUploadViewModel.TotalParts = file.Length / App.MinimumPartSize + 1;//计算出文件总块数

                //20210109 插入内容,如果不存在二级、三级内容及内容,直接创建并插入,如果存在二级、三级及对应内容则不插入,并返回标识
                ObjectStat statObject = await PutObject_Tester(minio, bucketName, objectName, filePath, contentType);

                Assert.IsTrue(statObject != null);
                Assert.IsTrue(statObject.MetaData != null);

                //await minio.PutObjectAsync(bucketName, objectName, filePath, contentType);//上传文件
                //await minio.PutObjectAsync();//上传文件

                Debug.WriteLine("Successfully uploaded " + objectName);
            }
            catch (MinioException e)
            {
                App.NewNLog.Error($"File Upload Error: {e}");
                Debug.WriteLine($"File Upload Error: {e.Message}");
            }
            finally
            {
                _minioClient.SetTraceOff();
            }
        }
Example #19
0
        // Get stats on a object
        public async static Task Run(MinioClient minio,
                                     string bucketName   = "my-bucket-name",
                                     string bucketObject = "my-object-name")
        {
            try
            {
                Console.WriteLine("Running example for API: StatObjectAsync");
                ObjectStat statObject = await minio.StatObjectAsync(bucketName, bucketObject);

                Console.WriteLine($"Details of the object {bucketObject} are {statObject}");
                Console.WriteLine();
            }
            catch (Exception e)
            {
                Console.WriteLine($"[StatObject] {bucketName}-{bucketObject} Exception: {e}");
            }
        }
Example #20
0
        private async static Task CopyObject_Test5(MinioClient minio)
        {
            // Test if multi-part copy upload for large files works as expected.
            Console.Out.WriteLine("Test5: CopyObjectsAsync");
            string bucketName     = GetRandomName(15);
            string objectName     = GetRandomName(10);
            string destBucketName = GetRandomName(15);
            string fileName       = CreateFile(7 * MB);

            await Setup_Test(minio, bucketName);
            await Setup_Test(minio, destBucketName);

            await minio.PutObjectAsync(bucketName,
                                       objectName,
                                       fileName);

            CopyConditions conditions = new CopyConditions();

            conditions.SetByteRange(1024, 6291456);

            // omit dest object name.
            await minio.CopyObjectAsync(bucketName, objectName, destBucketName, copyConditions : conditions);

            string outFileName = "outFileName";

            await minio.GetObjectAsync(bucketName, objectName, outFileName);

            File.Delete(outFileName);
            ObjectStat stats = await minio.StatObjectAsync(destBucketName, objectName);

            Assert.IsNotNull(stats);
            Assert.AreEqual(stats.ObjectName, objectName);
            Assert.AreEqual(stats.Size, 6291456 - 1024 + 1);
            await minio.RemoveObjectAsync(bucketName, objectName);

            await minio.RemoveObjectAsync(destBucketName, objectName);


            await TearDown(minio, bucketName);
            await TearDown(minio, destBucketName);

            File.Delete(fileName);
            Console.Out.WriteLine("Test4: CopyObjectsAsync Complete");
        }
Example #21
0
        private async static Task StatObject_Test1(MinioClient minio)
        {
            Console.Out.WriteLine("Test1: StatObjectAsync");
            string bucketName  = GetRandomName(15);
            string objectName  = GetRandomName(10);
            string fileName    = CreateFile(1 * MB);
            string contentType = "gzip";

            await Setup_Test(minio, bucketName);

            try
            {
                byte[] bs = File.ReadAllBytes(fileName);
                System.IO.MemoryStream filestream = new System.IO.MemoryStream(bs);
                long file_write_size = filestream.Length;

                await minio.PutObjectAsync(bucketName,
                                           objectName,
                                           filestream,
                                           filestream.Length,
                                           contentType);


                ObjectStat statObject = await minio.StatObjectAsync(bucketName, objectName);

                Assert.IsNotNull(statObject);
                Assert.AreEqual(statObject.ObjectName, objectName);
                Assert.AreEqual(statObject.Size, file_write_size);
                Assert.AreEqual(statObject.ContentType, contentType);

                await minio.RemoveObjectAsync(bucketName, objectName);
            }
            catch (Exception e)
            {
                Console.WriteLine("[Bucket]  Exception: {0}", e);
                Assert.Fail();
            }
            await TearDown(minio, bucketName);

            File.Delete(fileName);
            Console.Out.WriteLine("Test1: StatObjectAsync Complete");
        }
Example #22
0
        private async static Task CopyObject_Test4(MinioClient minio)
        {
            // Test if objectName is defaulted to source objectName
            Console.Out.WriteLine("Test4: CopyObjectsAsync");
            string bucketName     = GetRandomName(15);
            string objectName     = GetRandomName(10);
            string destBucketName = GetRandomName(15);
            string fileName       = CreateFile(1 * MB);

            await Setup_Test(minio, bucketName);
            await Setup_Test(minio, destBucketName);

            await minio.PutObjectAsync(bucketName,
                                       objectName,
                                       fileName);

            CopyConditions conditions = new CopyConditions();

            conditions.SetMatchETag("TestETag");
            // omit dest bucket name.
            await minio.CopyObjectAsync(bucketName, objectName, destBucketName);

            string outFileName = "outFileName";

            await minio.GetObjectAsync(bucketName, objectName, outFileName);

            File.Delete(outFileName);
            ObjectStat stats = await minio.StatObjectAsync(destBucketName, objectName);

            Assert.IsNotNull(stats);
            Assert.AreEqual(stats.ObjectName, objectName);
            await minio.RemoveObjectAsync(bucketName, objectName);

            await minio.RemoveObjectAsync(destBucketName, objectName);


            await TearDown(minio, bucketName);
            await TearDown(minio, destBucketName);

            File.Delete(fileName);
            Console.Out.WriteLine("Test4: CopyObjectsAsync Complete");
        }
    /// <summary>
    ///     private helper method return the specified object from the bucket
    /// </summary>
    /// <param name="args">GetObjectArgs Arguments Object encapsulates information like - bucket name, object name etc </param>
    /// <param name="objectStat"> ObjectStat object encapsulates information like - object name, size, etag etc </param>
    /// <param name="cancellationToken">Optional cancellation token to cancel the operation</param>
    private Task getObjectFileAsync(GetObjectArgs args, ObjectStat objectStat,
                                    CancellationToken cancellationToken = default)
    {
        var length = objectStat.Size;
        var etag   = objectStat.ETag;

        long tempFileSize = 0;
        var  tempFileName = $"{args.FileName}.{etag}.part.minio";

        if (!string.IsNullOrEmpty(args.VersionId))
        {
            tempFileName = $"{args.FileName}.{etag}.{args.VersionId}.part.minio";
        }
        if (File.Exists(args.FileName))
        {
            File.Delete(args.FileName);
        }

        utils.ValidateFile(tempFileName);
        if (File.Exists(tempFileName))
        {
            File.Delete(tempFileName);
        }

        args = args.WithCallbackStream(stream =>
        {
            var fileStream = File.Create(tempFileName);
            stream.CopyTo(fileStream);
            fileStream.Dispose();
            var writtenInfo = new FileInfo(tempFileName);
            var writtenSize = writtenInfo.Length;
            if (writtenSize != length - tempFileSize)
            {
                throw new IOException(tempFileName +
                                      ": Unexpected data written. Expected = "
                                      + (length - tempFileSize)
                                      + ", written = " + writtenSize);
            }
            utils.MoveWithReplace(tempFileName, args.FileName);
        });
        return(getObjectStreamAsync(args, objectStat, null, cancellationToken));
    }
Example #24
0
        // Get stats on a object
        public async static Task Run(MinioClient minio,
                                     string bucketName   = "my-bucket-name",
                                     string bucketObject = "my-object-name",
                                     string versionID    = null)
        {
            try
            {
                Console.WriteLine("Running example for API: StatObjectAsync");
                if (string.IsNullOrEmpty(versionID))
                {
                    StatObjectArgs objectStatArgs = new StatObjectArgs()
                                                    .WithBucket(bucketName)
                                                    .WithObject(bucketObject);
                    ObjectStat statObject = await minio.StatObjectAsync(objectStatArgs);

                    PrintStat(bucketObject, statObject);
                    PrintMetaData(statObject.MetaData);
                    return;
                }
                StatObjectArgs args = new StatObjectArgs()
                                      .WithBucket(bucketName)
                                      .WithObject(bucketObject)
                                      .WithVersionId(versionID);
                ObjectStat statObjectVersion = await minio.StatObjectAsync(args);

                PrintStat(bucketObject, statObjectVersion);
                PrintMetaData(statObjectVersion.MetaData);
            }
            catch (MinioException me)
            {
                string objectNameInfo = $"{bucketName}-{bucketObject}";
                if (!string.IsNullOrEmpty(versionID))
                {
                    objectNameInfo = objectNameInfo + $" (Version ID) {me.Response.VersionId} (Delete Marker) {me.Response.DeleteMarker}";
                }
                Console.WriteLine($"[StatObject] {objectNameInfo} Exception: {me}");
            }
            catch (Exception e)
            {
                Console.WriteLine($"[StatObject] {bucketName}-{bucketObject} Exception: {e}");
            }
        }
Example #25
0
        private async static Task PresignedGetObject_Test1(MinioClient minio)
        {
            Console.Out.WriteLine("Test1: PresignedGetObjectAsync");
            string bucketName   = GetRandomName(15);
            string objectName   = GetRandomName(10);
            string fileName     = CreateFile(1 * MB);
            string downloadFile = "downloadFileName";

            await Setup_Test(minio, bucketName);

            await minio.PutObjectAsync(bucketName,
                                       objectName,
                                       fileName);

            ObjectStat stats = await minio.StatObjectAsync(bucketName, objectName);

            string presigned_url = await minio.PresignedGetObjectAsync(bucketName, objectName, 1000);

            WebRequest httpRequest = WebRequest.Create(presigned_url);
            var        response    = (HttpWebResponse)(await Task <WebResponse> .Factory.FromAsync(httpRequest.BeginGetResponse, httpRequest.EndGetResponse, null));
            Stream     stream      = response.GetResponseStream();
            var        fileStream  = File.Create(downloadFile);

            stream.CopyTo(fileStream);
            fileStream.Dispose();
            FileInfo writtenInfo    = new FileInfo(downloadFile);
            long     file_read_size = writtenInfo.Length;

            // Compare size of file downloaded  with presigned curl request and actual object size on server
            Assert.AreEqual(file_read_size, stats.Size);

            await minio.RemoveObjectAsync(bucketName, objectName);

            await TearDown(minio, bucketName);

            File.Delete(fileName);
            File.Delete(downloadFile);
            Console.Out.WriteLine("Test1: PresignedGetObjectAsync Complete");
        }
Example #26
0
        public async Task <GetImageStatusResult> GetImageStatusAsync(ImageLocationParam param)
        {
            try
            {
                ObjectStat os = await _minio.StatObjectAsync(param.BucketName, param.ImageName);

                return(new GetImageStatusResult()
                {
                    ImageName = os.ObjectName,
                    Size = os.Size,
                    LastModified = os.LastModified,
                    ETag = os.ETag,
                    ContentType = os.ContentType,
                    MetaData = os.MetaData
                });
            }
            catch (Exception exception)
            {
                //SentrySdk.CaptureException(exception);
                throw;
            }
        }
Example #27
0
    public static ObjectStat FromResponseHeaders(string objectName, Dictionary <string, string> responseHeaders)
    {
        if (string.IsNullOrEmpty(objectName))
        {
            throw new ArgumentNullException("Name of an object cannot be empty");
        }
        var objInfo = new ObjectStat();

        objInfo.ObjectName = objectName;
        foreach (var paramName in responseHeaders.Keys)
        {
            var paramValue = responseHeaders[paramName];
            switch (paramName.ToLower())
            {
            case "content-length":
                objInfo.Size = long.Parse(paramValue);
                break;

            case "last-modified":
                objInfo.LastModified = DateTime.Parse(paramValue, CultureInfo.InvariantCulture);
                break;

            case "etag":
                objInfo.ETag = paramValue.Replace("\"", string.Empty);
                break;

            case "content-type":
                objInfo.ContentType = paramValue;
                objInfo.MetaData["Content-Type"] = objInfo.ContentType;
                break;

            case "x-amz-version-id":
                objInfo.VersionId = paramValue;
                break;

            case "x-amz-delete-marker":
                objInfo.DeleteMarker = paramValue.Equals("true");
                break;

            case "x-amz-archive-status":
                objInfo.ArchiveStatus = paramValue;
                break;

            case "x-amz-tagging-count":
                if (int.TryParse(paramValue, out var tagCount) && tagCount >= 0)
                {
                    objInfo.TaggingCount = (uint)tagCount;
                }
                break;

            case "x-amz-expiration":
                // x-amz-expiration header includes the expiration date and the corresponding rule id.
                var expirationResponse = paramValue.Trim();
                var expiryDatePattern  =
                    @"(Sun|Mon|Tue|Wed|Thu|Fri|Sat), \d{2} (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) \d{4} \d{2}:\d{2}:\d{2} [A-Z]+";
                var expiryMatch = Regex.Match(expirationResponse, expiryDatePattern);
                if (expiryMatch.Success)
                {
                    objInfo.Expires = DateTime.SpecifyKind(
                        DateTime.Parse(expiryMatch.Value),
                        DateTimeKind.Utc);
                }
                break;

            case "x-amz-object-lock-mode":
                if (!string.IsNullOrWhiteSpace(paramValue))
                {
                    objInfo.ObjectLockMode = paramValue.ToLower().Equals("governance")
                            ? RetentionMode.GOVERNANCE
                            : RetentionMode.COMPLIANCE;
                }
                break;

            case "x-amz-object-lock-retain-until-date":
                var lockUntilDate = paramValue;
                if (!string.IsNullOrWhiteSpace(lockUntilDate))
                {
                    objInfo.ObjectLockRetainUntilDate = DateTime.SpecifyKind(
                        DateTime.Parse(lockUntilDate),
                        DateTimeKind.Utc);
                    ;
                }

                break;

            case "x-amz-object-lock-legal-hold":
                var legalHoldON = paramValue.Trim();
                if (!string.IsNullOrWhiteSpace(legalHoldON))
                {
                    objInfo.LegalHoldEnabled = legalHoldON.ToLower().Equals("on");
                }
                break;

            default:
                if (OperationsUtil.IsSupportedHeader(paramName))
                {
                    objInfo.MetaData[paramName] = paramValue;
                }
                else if (paramName.StartsWith("x-amz-meta-", StringComparison.OrdinalIgnoreCase))
                {
                    objInfo.MetaData[paramName.Substring("x-amz-meta-".Length)] = paramValue;
                }
                else
                {
                    objInfo.ExtraHeaders[paramName] = paramValue;
                }
                break;
            }
        }

        return(objInfo);
    }