/// <summary>
        /// Gets the current representation of the given bucket in the given Object Storage namespace.
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public async Task <GetBucketResponse> GetBucket(GetBucketRequest request)
        {
            var uri = new Uri($"{GetEndPointNoneVersion(ObjectStorageServices.Bucket(request.NamespaceName), this.Region)}/{request.BucketName}/");

            var httpRequestHeaderParam = new HttpRequestHeaderParam()
            {
                IfMatch            = request.IfMatch,
                IfNoneMatch        = request.IfNoneMatch,
                OpcClientRequestId = request.OpcClientRequestId
            };
            var webResponse = await this.RestClientAsync.Get(uri, httpRequestHeaderParam, request.Fields);

            using (var stream = webResponse.GetResponseStream())
                using (var reader = new StreamReader(stream))
                {
                    var response = reader.ReadToEnd();

                    return(new GetBucketResponse()
                    {
                        Bucket = JsonSerializer.Deserialize <Bucket>(response),
                        ETag = webResponse.Headers.Get("ETag"),
                        OpcRequestId = webResponse.Headers.Get("opc-request-id"),
                        OpcClientRequestId = webResponse.Headers.Get("opc-client-request-id")
                    });
                }
        }
Пример #2
0
 /// 获取对象列表与子目录
 public void GetBucketWithDelimiter()
 {
     //.cssg-snippet-body-start:[get-bucket-with-delimiter]
     try
     {
         string           bucket  = "examplebucket-1250000000"; //格式:BucketName-APPID
         GetBucketRequest request = new GetBucketRequest(bucket);
         //获取 a/ 下的对象以及子目录
         request.SetPrefix("a/");
         //执行请求
         GetBucketResult result = cosXml.GetBucket(request);
         //bucket的相关信息
         ListBucket info = result.listBucket;
         // 对象列表
         List <ListBucket.Contents> objects = info.contentsList;
         // 子目录列表
         List <ListBucket.CommonPrefixes> subDirs = info.commonPrefixesList;
     }
     catch (COSXML.CosException.CosClientException clientEx)
     {
         //请求失败
         Console.WriteLine("CosClientException: " + clientEx);
     }
     catch (COSXML.CosException.CosServerException serverEx)
     {
         //请求失败
         Console.WriteLine("CosServerException: " + serverEx.GetInfo());
     }
     //.cssg-snippet-body-end
 }
Пример #3
0
        public void testCustomHost()
        {
            string customHost = "www.my.custom.host.com";
            // test host
            CosXmlConfig configWithHost = new CosXmlConfig.Builder()
                                          .setHost(customHost)
                                          .Build();
            string       bucket = "bucket-125000";
            CosXmlServer cosXml = new CosXmlServer(configWithHost, null);

            GetBucketRequest bucketRequest = new GetBucketRequest(bucket);

            try {
                cosXml.GetBucket(bucketRequest);
            } catch (Exception e) {
                // ignore
            }
            Assert.AreEqual(customHost, bucketRequest.GetHost());

            GetObjectRequest request = new GetObjectRequest(bucket, "aKey", null, null);

            try {
                cosXml.GetObject(request);
            } catch (Exception e) {
                // ignore
            }
            Assert.AreEqual(customHost, request.GetHost());

            GetServiceRequest serviceRequest = new GetServiceRequest();

            Assert.AreEqual("service.cos.myqcloud.com", serviceRequest.GetHost());
        }
Пример #4
0
 /// 获取第二页对象列表
 public void GetBucketNextPage()
 {
     //.cssg-snippet-body-start:[get-bucket-next-page]
     try
     {
         string           bucket  = "examplebucket-1250000000"; //格式:BucketName-APPID
         GetBucketRequest request = new GetBucketRequest(bucket);
         //上一次拉取数据的下标
         request.SetMarker(this.nextMarker);
         //执行请求
         GetBucketResult result = cosXml.GetBucket(request);
         //bucket的相关信息
         ListBucket info = result.listBucket;
     }
     catch (COSXML.CosException.CosClientException clientEx)
     {
         //请求失败
         Console.WriteLine("CosClientException: " + clientEx);
     }
     catch (COSXML.CosException.CosServerException serverEx)
     {
         //请求失败
         Console.WriteLine("CosServerException: " + serverEx.GetInfo());
     }
     //.cssg-snippet-body-end
 }
Пример #5
0
        /// <summary>
        ///     列出指定容器下的对象列表
        /// </summary>
        /// <param name="containerName"></param>
        /// <returns></returns>
        public async Task <IList <BlobFileInfo> > ListBlobs(string containerName)
        {
            if (!string.IsNullOrWhiteSpace(containerName) && !containerName.EndsWith("/"))
            {
                containerName += "/";
            }

            var req = new GetBucketRequest(_tcConfig.BucketName);

            req.SetPrefix(containerName);
            var resp = _cosXmlServer.GetBucket(req);
            await resp.HandlerError("获取对象列表出错!");

            var list = resp.listBucket.contentsList
                       .Select(obj =>
                               new BlobFileInfo
            {
                Container    = containerName?.Trim('/'),
                ETag         = obj.eTag,
                Length       = obj.size,
                LastModified = Convert.ToDateTime(obj.lastModified),
                Name         = obj.key.Replace(containerName, string.Empty),
                Url          = GetUrlByKey(obj.key),
                //ContentMD5 =
            });

            return(list.ToArray());
        }
Пример #6
0
        protected override void ProcessRecord()
        {
            base.ProcessRecord();
            GetBucketRequest request;

            try
            {
                request = new GetBucketRequest
                {
                    NamespaceName      = NamespaceName,
                    BucketName         = BucketName,
                    IfMatch            = IfMatch,
                    IfNoneMatch        = IfNoneMatch,
                    OpcClientRequestId = OpcClientRequestId,
                    Fields             = Fields
                };

                response = client.GetBucket(request).GetAwaiter().GetResult();
                WriteOutput(response, response.Bucket);
                FinishProcessing(response);
            }
            catch (Exception ex)
            {
                TerminatingErrorDuringExecution(ex);
            }
        }
Пример #7
0
        public async Task <ResponseModel> SelectObjectList()
        {
            try
            {
                string           bucket  = _buketName + "-" + _appid; //存储桶名称 格式:BucketName-APPID
                GetBucketRequest request = new GetBucketRequest(bucket);
                //设置签名有效时长
                request.SetSign(TimeUtils.GetCurrentTime(TimeUnit.SECONDS), 600);
                //执行请求
                GetBucketResult result = await Task.FromResult(_cosXml.GetBucket(request));

                return(new ResponseModel {
                    Code = 200, Data = result.GetResultInfo()
                });
            }
            catch (CosClientException clientEx)
            {
                return(new ResponseModel {
                    Code = 0, Data = "CosClientException: " + clientEx.Message
                });
            }
            catch (CosServerException serverEx)
            {
                return(new ResponseModel {
                    Code = 0, Data = "CosServerException: " + serverEx.GetInfo()
                });
            }
        }
        public void AsyncGetBucket()
        {
            ManualResetEvent manualResetEvent = new ManualResetEvent(false);

            GetBucketRequest request = new GetBucketRequest(QCloudServer.Instance().bucketForObjectTest);

            ///执行请求
            QCloudServer.Instance().cosXml.GetBucket(request,
                                                     delegate(CosResult cosResult)
            {
                GetBucketResult result = cosResult as GetBucketResult;

                Assert.True(result.httpCode == 200);
                manualResetEvent.Set();
            },

                                                     delegate(CosClientException clientEx, CosServerException serverEx)
            {
                if (clientEx != null)
                {
                    Console.WriteLine("CosClientException: " + clientEx.Message);
                }

                if (serverEx != null)
                {
                    Console.WriteLine("CosServerException: " + serverEx.GetInfo());
                }

                Assert.Fail();
                manualResetEvent.Set();
            }
                                                     );

            manualResetEvent.WaitOne();
        }
Пример #9
0
        /// 获取对象列表
        public void GetBucket()
        {
            //.cssg-snippet-body-start:[get-bucket]
            try
            {
                string           bucket  = "examplebucket-1250000000"; //格式:BucketName-APPID
                GetBucketRequest request = new GetBucketRequest(bucket);
                //执行请求
                GetBucketResult result = cosXml.GetBucket(request);
                //bucket的相关信息
                ListBucket info = result.listBucket;
                if (info.isTruncated)
                {
                    // 数据被截断,记录下数据下标
                    this.nextMarker = info.nextMarker;
                }
            }
            catch (COSXML.CosException.CosClientException clientEx)
            {
                //请求失败
                Console.WriteLine("CosClientException: " + clientEx);
            }
            catch (COSXML.CosException.CosServerException serverEx)
            {
                //请求失败
                Console.WriteLine("CosServerException: " + serverEx.GetInfo());
            }

            //.cssg-snippet-body-end
        }
Пример #10
0
        private IEnumerable <Picture> GetPicturesByBucket(string bucket)
        {
            var request = new GetBucketRequest(bucket);

            //设置签名有效时长
            request.SetSign(TimeUtils.GetCurrentTime(TimeUnit.SECONDS), _cosConfig.DurationSecond);
            var response = _cosXml.GetBucket(request);

            var result = response.listBucket.contentsList
                         .Select(it =>
            {
                var picture = new Picture
                {
                    Url  = $"{_cosConfig.BaseUrl}/{HttpUtility.HtmlEncode(it.key)}",
                    Size = it.size,
                    ETag = it.eTag
                };
                DateTime.TryParse(it.lastModified, out var time);
                picture.LastModified = time;

                return(picture);
            })
                         .OrderByDescending(it => it.LastModified);

            return(result);
        }
Пример #11
0
        public Task <GetBucketResponse> GetAsync(string bucketName, Action <GetBucketRequest> config = null, CancellationToken token = default)
        {
            GetBucketRequest req = new GetBucketRequest(bucketName);

            config?.Invoke(req);

            return(_requestHandler.SendRequestAsync <GetBucketRequest, GetBucketResponse>(req, token));
        }
Пример #12
0
        /// <summary>
        /// 获取bukect中的所有文件
        /// </summary>
        /// <param name="bucketName"></param>
        /// <param name="config"></param>
        /// <param name="cosCredentialProvider"></param>
        /// <returns></returns>
        public static List <CloudFile> ListObjects()
        {
            if (BosConfig == null)
            {
                return(null);
            }

            //初始化 CosXmlServer
            CosXmlServer     cosXml  = getCosXmlServer();
            GetBucketRequest request = new GetBucketRequest(BosConfig.BucketName);

            //设置签名有效时长
            request.SetSign(TimeUtils.GetCurrentTime(TimeUnit.SECONDS), 600);
            request.SetMaxKeys(1 + "");
            //执行请求
            GetBucketResult result = cosXml.GetBucket(request);

            ListBucket listBucket = result.listBucket;

            List <ListBucket.Contents> contents = listBucket.contentsList;

            List <CloudFile> cloudFiles = new List <CloudFile>();

            foreach (ListBucket.Contents content in contents)
            {
                CloudFile cloudFile = new CloudFile
                {
                    Key          = content.key,
                    Size         = content.size,
                    LastModified = content.lastModified
                };
                cloudFiles.Add(cloudFile);
            }

            while (result.listBucket.nextMarker != null)
            {
                request.SetMarker(result.listBucket.nextMarker);

                //执行请求
                result = cosXml.GetBucket(request);

                foreach (ListBucket.Contents content in result.listBucket.contentsList)
                {
                    CloudFile cloudFile = new CloudFile
                    {
                        Key          = content.key,
                        Size         = content.size,
                        LastModified = content.lastModified
                    };

                    cloudFiles.Add(cloudFile);
                }
            }

            Console.WriteLine(cloudFiles);
            return(cloudFiles);
        }
Пример #13
0
        public static void test(CosXml cosXml)
        {
            List <string>    keys      = new List <string>();
            string           bucket    = "android-demo-ap-guangzhou";
            GetBucketRequest getBucket = new GetBucketRequest(bucket);

            getBucket.Region = EnumUtils.GetValue(CosRegion.AP_Guangzhou);
            getBucket.SetSign(COSXML.Utils.TimeUtils.GetCurrentTime(TimeUnit.SECONDS), 600);
            GetBucketResult result = cosXml.GetBucket(getBucket);

            Console.WriteLine(result.GetResultInfo());
            foreach (ListBucket.Contents content in result.listBucket.contentsList)
            {
                if (content != null)
                {
                    keys.Add(content.key);
                }
            }
            if (keys.Count > 0)
            {
                COSXML.Model.Object.DeleteMultiObjectRequest deleteMults = new COSXML.Model.Object.DeleteMultiObjectRequest(bucket);
                deleteMults.SetSign(COSXML.Utils.TimeUtils.GetCurrentTime(TimeUnit.SECONDS), 600);
                deleteMults.Region = EnumUtils.GetValue(CosRegion.AP_Guangzhou);
                deleteMults.SetObjectKeys(keys);
                COSXML.Model.Object.DeleteMultiObjectResult deleteMultisResult = cosXml.DeleteMultiObjects(deleteMults);
                Console.WriteLine(deleteMultisResult.GetResultInfo());
            }

            ListMultiUploadsRequest listMultis = new ListMultiUploadsRequest(bucket);

            listMultis.Region = EnumUtils.GetValue(CosRegion.AP_Guangzhou);
            listMultis.SetSign(TimeUtils.GetCurrentTime(TimeUnit.SECONDS), 600);
            ListMultiUploadsResult listMultisResult = cosXml.ListMultiUploads(listMultis);

            Console.WriteLine(listMultisResult.GetResultInfo());

            if (listMultisResult.listMultipartUploads.uploads.Count > 0)
            {
                foreach (ListMultipartUploads.Upload upload in listMultisResult.listMultipartUploads.uploads)
                {
                    if (upload == null)
                    {
                        continue;
                    }
                    string key      = upload.key;
                    string uploadId = upload.uploadID;

                    COSXML.Model.Object.AbortMultiUploadRequest abort = new COSXML.Model.Object.AbortMultiUploadRequest(bucket,
                                                                                                                        key, uploadId);
                    abort.Region = EnumUtils.GetValue(CosRegion.AP_Guangzhou);
                    abort.SetSign(COSXML.Utils.TimeUtils.GetCurrentTime(TimeUnit.SECONDS), 600);
                    COSXML.Model.Object.AbortMultiUploadResult abortResult = cosXml.AbortMultiUpload(abort);
                }
            }
        }
        public void TestSetSign()
        {
            GetBucketRequest request = new GetBucketRequest(QCloudServer.Instance().bucketForObjectTest);

            request.SetSign(TimeUtils.GetCurrentTime(TimeUnit.Seconds), 600);

            ///执行请求
            GetBucketResult result = QCloudServer.Instance().cosXml.GetBucket(request);

            Assert.AreEqual(result.httpCode, 200);
        }
Пример #15
0
        public void ThrowExceptionGetBucketCustomEndpointAndOutpostsDualstackNotSupported()
        {
            var request = new GetBucketRequest
            {
                Bucket = "arn:aws:s3-outposts:us-west-2:123456789012:outpost:op-01234567890123456:bucket:mybucket"
            };

            var config = CreateConfig("https://beta.example.com", Flags.Dualstack);

            S3ControlArnTestUtils.RunMockRequest(request, GetBucketRequestMarshaller.Instance, config);
        }
Пример #16
0
        public void VpceEndpointTests_GetBucket(string bucketName, string serviceUrl, Flags flags,
                                                string expectedUri, string expectedRegion, string expectedService)
        {
            var request = new GetBucketRequest
            {
                Bucket = bucketName
            };

            RunTestRequest(request, GetBucketRequestMarshaller.Instance,
                           Arn.IsArn(bucketName), serviceUrl, flags,
                           expectedUri, expectedRegion, expectedService);
        }
Пример #17
0
        /// <summary>
        /// 查询指定路径下面的对象
        /// </summary>
        /// <param name="tEST"></param>
        /// <returns></returns>
        public ResultModel <ListBucket> GetBucketResult(string tEST)
        {
            CosXmlConfig config = new CosXmlConfig.Builder()
                                  .SetConnectionTimeoutMs(SetConnectionTimeoutMs) //设置连接超时时间,单位毫秒,默认45000ms
                                  .SetReadWriteTimeoutMs(SetReadWriteTimeoutMs)   //设置读写超时时间,单位毫秒,默认45000ms
                                  .IsHttps(IsHttps)                               //设置默认 HTTPS 请求
                                  .SetAppid(SetAppid)                             //设置腾讯云账户的账户标识 APPID
                                  .SetRegion(SetRegion)                           //设置一个默认的存储桶地域
                                  .Build();
            string secretId       = SecretId;                                     //云 API 密钥 SecretId
            string secretKey      = SecretKey;                                    //云 API 密钥 SecretKey
            long   durationSecond = 600;                                          //每次请求签名有效时长,单位为秒
            QCloudCredentialProvider qCloudCredentialProvider = new DefaultQCloudCredentialProvider(secretId,
                                                                                                    secretKey, durationSecond);

            CosXml cosXml = new CosXmlServer(config, qCloudCredentialProvider);
            ResultModel <ListBucket> resu = new ResultModel <ListBucket>();

            try
            {
                string           bucket  = "yuanguhl"; //格式:BucketName-APPID
                GetBucketRequest request = new GetBucketRequest(bucket);
                request.Region = "ap-beijing";
                //设置签名有效时长
                request.SetSign(TimeUtils.GetCurrentTime(TimeUnit.SECONDS), 600);
                //获取 a/ 下的对象
                if (!string.IsNullOrEmpty(tEST))
                {
                    request.SetPrefix(tEST);
                }
                //执行请求
                GetBucketResult result = cosXml.GetBucket(request);
                //请求成功
                resu.date    = result.listBucket;
                resu.success = true;
                return(resu);
            }
            catch (COSXML.CosException.CosClientException clientEx)
            {
                //请求失败
                resu.success = false;
                resu.message = clientEx.InnerException.ToString();
                return(resu);
            }
            catch (COSXML.CosException.CosServerException serverEx)
            {
                //请求失败
                resu.success = false;
                resu.message = serverEx.InnerException.ToString();
                return(resu);
            }
        }
Пример #18
0
        /// 指定前缀批量删除对象
        public void DeletePrefix()
        {
            //.cssg-snippet-body-start:[delete-prefix]
            try
            {
                String nextMarker = null;

                // 循环请求直到没有下一页数据
                do
                {
                    string           bucket      = "examplebucket-1250000000"; //存储桶,格式:BucketName-APPID
                    string           prefix      = "folder1/";                 //指定前缀
                    GetBucketRequest listRequest = new GetBucketRequest(bucket);
                    //获取 folder1/ 下的所有对象以及子目录
                    listRequest.SetPrefix(prefix);
                    listRequest.SetMarker(nextMarker);
                    //执行列出对象请求
                    GetBucketResult listResult = cosXml.GetBucket(listRequest);
                    ListBucket      info       = listResult.listBucket;
                    // 对象列表
                    List <ListBucket.Contents> objects = info.contentsList;
                    // 下一页的下标
                    nextMarker = info.nextMarker;

                    DeleteMultiObjectRequest deleteRequest = new DeleteMultiObjectRequest(bucket);
                    //设置返回结果形式
                    deleteRequest.SetDeleteQuiet(false);
                    //对象列表
                    List <string> deleteObjects = new List <string>();
                    foreach (var content in objects)
                    {
                        deleteObjects.Add(content.key);
                    }
                    deleteRequest.SetObjectKeys(deleteObjects);
                    //执行批量删除请求
                    DeleteMultiObjectResult deleteResult = cosXml.DeleteMultiObjects(deleteRequest);
                    //打印请求结果
                    Console.WriteLine(deleteResult.GetResultInfo());
                } while (nextMarker != null);
            }
            catch (COSXML.CosException.CosClientException clientEx)
            {
                //请求失败
                Console.WriteLine("CosClientException: " + clientEx);
            }
            catch (COSXML.CosException.CosServerException serverEx)
            {
                //请求失败
                Console.WriteLine("CosServerException: " + serverEx.GetInfo());
            }
            //.cssg-snippet-body-end
        }
Пример #19
0
        public IEnumerable <IFileEntry> List()
        {
            bool   isTruncated = true;
            string filename    = null;

            while (isTruncated)
            {
                cosXml = GetCosXml();
                string bucket = _cosOptions.Bucket;
                string prefix = _cosOptions.Path;

                GetBucketRequest request = new GetBucketRequest(bucket);

                request.SetSign(TimeUtils.GetCurrentTime(TimeUnit.SECONDS), 600);

                if (!string.IsNullOrEmpty(filename))
                {
                    request.SetMarker(filename);
                }

                if (!string.IsNullOrEmpty(prefix))
                {
                    request.SetPrefix(prefix);
                }

                GetBucketResult result = cosXml.GetBucket(request);

                ListBucket info = result.listBucket;

                isTruncated = result.listBucket.isTruncated;
                filename    = result.listBucket.nextMarker;

                foreach (var item in info.contentsList)
                {
                    var last = DateTime.Parse(item.lastModified);

                    var fileName = item.key;
                    if (!string.IsNullOrWhiteSpace(prefix))
                    {
                        fileName = fileName.Substring(prefix.Length);

                        if (fileName.StartsWith("/", StringComparison.Ordinal))
                        {
                            fileName = fileName.Trim('/');
                        }
                    }

                    yield return(new FileEntry(fileName, item.size, last, last));
                }
            }
        }
        public void 特定のバケット情報のみ取得()
        {
            GetBucketRequest getBucketRequest = new GetBucketRequest
            {
                NamespaceName = NameSpaceName,
                BucketName    = TestBucketName
            };

            var bucketDetails = ObjectStorageClient.GetBucket(getBucketRequest);

            Assert.IsNotNull(bucketDetails.Bucket);
            Assert.IsTrue(bucketDetails.Bucket.Name == TestBucketName);
            Assert.IsNotNull(bucketDetails.Bucket.TimeCreated);
        }
Пример #21
0
        public void TestHostEndpoint()
        {
            CosXmlConfig config = new CosXmlConfig.Builder()
                                  .SetConnectionLimit(512)
                                  .SetEndpointSuffix("cos.accelerate.myqcloud.com")
                                  .Build();


            CosXmlServer cosXml = new CosXmlServer(config, null);

            string bucket = "bucket-125000";

            GetObjectRequest request = new GetObjectRequest(bucket, "aKey", null, null);

            try
            {
                cosXml.GetObject(request);
            }
            catch (Exception)
            {
                // ignore
            }

            Assert.AreEqual(bucket + "." + config.endpointSuffix, request.GetHost());

            GetBucketRequest bucketRequest = new GetBucketRequest(bucket);

            try
            {
                cosXml.GetBucket(bucketRequest);
            }
            catch (Exception)
            {
                // ignore
            }

            Assert.AreEqual(bucket + "." + config.endpointSuffix, bucketRequest.GetHost());

            // test service request
            GetServiceRequest serviceRequest = new GetServiceRequest();

            Assert.AreEqual("service.cos.myqcloud.com", serviceRequest.GetHost());

            string serviceHost = "service.cos.csp.com";

            serviceRequest.host = serviceHost;
            Assert.AreEqual(serviceHost, serviceRequest.GetHost());
        }
        public void ArnIdSetFieldIdNotSet()
        {
            var outpostArn      = "arn:aws:s3-outposts:us-west-2:123456789012:outpost:op-01234567890123456:bucket:mybucket";
            var s3ControlConfig = new AmazonS3ControlConfig
            {
                UseArnRegion   = true,
                RegionEndpoint = RegionEndpoint.USWest2
            };
            var getBucketRequest = new GetBucketRequest
            {
                Bucket = outpostArn
            };
            var marshalledRequest = S3ControlArnTestUtils.RunMockRequest(getBucketRequest, GetBucketRequestMarshaller.Instance, s3ControlConfig);

            Assert.AreEqual("123456789012", marshalledRequest.Headers["x-amz-account-id"]);
        }
        /// <summary>
        /// Returns the Region the bucket resides in.
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public List <string> GetBucketLocation(GetBucketLocationRequest request)
        {
            ListRegionSubscriptionsRequest listRegionSubscriptionsRequest = new ListRegionSubscriptionsRequest
            {
                TenancyId = base.Config.TenancyId
            };
            var regions = IdentityClient.ListRegionSubscriptions(listRegionSubscriptionsRequest);

            var nameSpaceName = GetNamespace(request);

            List <string> res = new List <string>();

            foreach (var region in regions.Items)
            {
                ObjectStorageClient.SetRegion(region.RegionName);

                GetBucketRequest getBucketRequest = new GetBucketRequest
                {
                    NamespaceName = nameSpaceName,
                    BucketName    = request.BucketName
                };

                try
                {
                    var b = ObjectStorageClient.GetBucket(getBucketRequest);

                    if (b.Bucket != null)
                    {
                        res.Add(region.RegionName);
                    }
                }
                catch (WebException we)
                {
                    if (!(we.Status.Equals(WebExceptionStatus.ProtocolError) && ((HttpWebResponse)we.Response).StatusCode == HttpStatusCode.NotFound))
                    {
                        throw;
                    }
                }
            }

            if (res.Count <= 0)
            {
                throw new Exception("NoSuchBucket");
            }

            return(res);
        }
        public async Task <List <Item> > ListObjectsAsync(string bucketName, string prefix = null)
        {
            if (string.IsNullOrEmpty(bucketName))
            {
                throw new ArgumentNullException(nameof(bucketName));
            }
            bucketName = ConvertBucketName(bucketName);
            ListBucket  info       = null;
            string      nextMarker = null;
            List <Item> items      = new List <Item>();

            do
            {
                GetBucketRequest request = new GetBucketRequest(bucketName);
                if (!string.IsNullOrEmpty(nextMarker))
                {
                    request.SetMarker(nextMarker);
                }
                if (!string.IsNullOrEmpty(prefix))
                {
                    request.SetPrefix(prefix);
                }
                //执行请求
                GetBucketResult result = _client.GetBucket(request);
                //bucket的相关信息
                info = result.listBucket;
                if (info.isTruncated)
                {
                    // 数据被截断,记录下数据下标
                    nextMarker = info.nextMarker;
                }
                foreach (var item in info.contentsList)
                {
                    items.Add(new Item()
                    {
                        Key          = item.key,
                        LastModified = item.lastModified,
                        ETag         = item.eTag,
                        Size         = (ulong)item.size,
                        IsDir        = false,
                        BucketName   = bucketName,
                        VersionId    = null,
                    });
                }
            } while (info.isTruncated);
            return(await Task.FromResult(items));
        }
Пример #25
0
        public void getBucket()
        {
            //.cssg-snippet-body-start:[get-bucket]
            CosXmlConfig config = new CosXmlConfig.Builder()
                                  .SetConnectionTimeoutMs(60000) //设置连接超时时间,单位毫秒,默认45000ms
                                  .SetReadWriteTimeoutMs(40000)  //设置读写超时时间,单位毫秒,默认45000ms
                                  .IsHttps(true)                 //设置默认 HTTPS 请求
                                  .SetAppid("1253653367")        //设置腾讯云账户的账户标识 APPID
                                  .SetRegion("ap-guangzhou")     //设置一个默认的存储桶地域
                                  .Build();

            string secretId       = Environment.GetEnvironmentVariable("COS_KEY");    //云 API 密钥 SecretId
            string secretKey      = Environment.GetEnvironmentVariable("COS_SECRET"); //云 API 密钥 SecretKey
            long   durationSecond = 600;                                              //每次请求签名有效时长,单位为秒
            QCloudCredentialProvider qCloudCredentialProvider = new DefaultQCloudCredentialProvider(secretId,
                                                                                                    secretKey, durationSecond);

            CosXml cosXml = new CosXmlServer(config, qCloudCredentialProvider);

            try
            {
                string           bucket  = "bucket-cssg-test-dotnet-1253653367"; //格式:BucketName-APPID
                GetBucketRequest request = new GetBucketRequest(bucket);
                //设置签名有效时长
                request.SetSign(TimeUtils.GetCurrentTime(TimeUnit.SECONDS), 600);
                //获取 a/ 下的对象
                request.SetPrefix("a/");
                //执行请求
                GetBucketResult result = cosXml.GetBucket(request);
                //bucket的相关信息
                ListBucket info = result.listBucket;
            }
            catch (COSXML.CosException.CosClientException clientEx)
            {
                //请求失败
                Console.WriteLine("CosClientException: " + clientEx);
                Assert.Null(clientEx);
            }
            catch (COSXML.CosException.CosServerException serverEx)
            {
                //请求失败
                Console.WriteLine("CosServerException: " + serverEx.GetInfo());
                Assert.Null(serverEx);
            }
            //.cssg-snippet-body-end
        }
        public void OutpostsBucketInputUSWest2UseArnRegionFalse()
        {
            var outpostsBucketArn = "arn:aws:s3-outposts:us-west-2:123456789012:outpost:op-01234567890123456:bucket:mybucket";
            var s3ControlConfig   = new AmazonS3ControlConfig
            {
                RegionEndpoint = RegionEndpoint.USWest2
            };
            var getBucketRequest = new GetBucketRequest
            {
                Bucket = outpostsBucketArn
            };
            var marshalledRequest = S3ControlArnTestUtils.RunMockRequest(getBucketRequest, GetBucketRequestMarshaller.Instance, s3ControlConfig);

            Assert.AreEqual(new Uri("https://s3-outposts.us-west-2.amazonaws.com"), marshalledRequest.Endpoint);
            Assert.AreEqual("op-01234567890123456", marshalledRequest.Headers[HeaderKeys.XAmzOutpostId]);
            Assert.AreEqual("123456789012", marshalledRequest.Headers[HeaderKeys.XAmzAccountId]);
        }
        public void ArnIdNotSetFieldIdNotSetException()
        {
            var outpostAccessPointName = "myAccessPoint";
            var s3ControlConfig        = new AmazonS3ControlConfig
            {
                UseArnRegion   = true,
                RegionEndpoint = RegionEndpoint.USWest2
            };
            var getBucketRequest = new GetBucketRequest
            {
                Bucket = outpostAccessPointName,
            };
            var exception = Assert.ThrowsException <AmazonS3ControlException>(() => {
                S3ControlArnTestUtils.RunMockRequest(getBucketRequest, GetBucketRequestMarshaller.Instance, s3ControlConfig);
            });

            Assert.AreEqual("AccountId can only contain alphanumeric characters and dashes and must be between 1 and 63 characters long.", exception.Message);
        }
        public void OutpostsBucketInputUSWest2UseArnRegionTrueInvalidArnException(string outpostsBucketArn)
        {
            var s3ControlConfig = new AmazonS3ControlConfig
            {
                RegionEndpoint = RegionEndpoint.USWest2,
                UseArnRegion   = true
            };
            var getBucketRequest = new GetBucketRequest
            {
                Bucket = outpostsBucketArn
            };
            var exception = Assert.ThrowsException <AmazonClientException>(() =>
            {
                S3ControlArnTestUtils.RunMockRequest(getBucketRequest, GetBucketRequestMarshaller.Instance, s3ControlConfig);
            });

            Assert.AreEqual("Invalid ARN, outpost resource format is incorrect", exception.Message);
        }
        public void OutpostsBucketInputUSGovEast1UseArnRegionTrueSystemFips()
        {
            var outpostsBucketArn = "arn:aws-us-gov:s3-outposts:us-gov-east-1:123456789012:outpost:op-01234567890123456:bucket:mybucket";
            var s3ControlConfig   = new AmazonS3ControlConfig
            {
                RegionEndpoint = RegionEndpoint.GetBySystemName("fips-us-gov-east-1"),
                UseArnRegion   = true
            };
            var getBucketRequest = new GetBucketRequest
            {
                Bucket = outpostsBucketArn
            };
            var marshalledRequest = S3ControlArnTestUtils.RunMockRequest(getBucketRequest, GetBucketRequestMarshaller.Instance, s3ControlConfig);

            Assert.AreEqual(new Uri("https://s3-outposts.us-gov-east-1.amazonaws.com"), marshalledRequest.Endpoint);
            Assert.AreEqual("op-01234567890123456", marshalledRequest.Headers[HeaderKeys.XAmzOutpostId]);
            Assert.AreEqual("123456789012", marshalledRequest.Headers[HeaderKeys.XAmzAccountId]);
        }
        public void OutpostsBucketInputUSEast1UseArnRegionFalseCrossRegionError()
        {
            var outpostsBucketArn = "arn:aws:s3-outposts:us-east-1:123456789012:outpost:op-01234567890123456:bucket:mybucket";
            var s3ControlConfig   = new AmazonS3ControlConfig
            {
                RegionEndpoint = RegionEndpoint.USWest2,
                UseArnRegion   = false
            };
            var getBucketRequest = new GetBucketRequest
            {
                Bucket = outpostsBucketArn
            };
            var exception = Assert.ThrowsException <AmazonClientException>(() =>
            {
                S3ControlArnTestUtils.RunMockRequest(getBucketRequest, GetBucketRequestMarshaller.Instance, s3ControlConfig);
            });

            Assert.AreEqual("Invalid configuration, cross region Outpost Bucket ARN", exception.Message);
        }