public Uri GeneratePresignedUri()

in sdk/OssClient.cs [1852:1921]


        public Uri GeneratePresignedUri(GeneratePresignedUriRequest generatePresignedUriRequest)
        {
            ThrowIfNullRequest(generatePresignedUriRequest);
            var conf = OssUtils.GetClientConfiguration(_serviceClient);
            var verifyObjectStrict = false;
            if (conf.SignatureVersion == SignatureVersion.V1)
            {
                verifyObjectStrict = conf.VerifyObjectStrict;
            }
            OssUtils.CheckObjectKey(generatePresignedUriRequest.Key, verifyObjectStrict);

            var bucketName = generatePresignedUriRequest.BucketName;
            var key = generatePresignedUriRequest.Key;

            var request = new ServiceRequest();
            request.Endpoint = OssUtils.MakeBucketEndpoint(_endpoint, bucketName, conf);
            request.ResourcePath = OssUtils.MakeResourcePath(_endpoint, bucketName, key); ;

            switch (generatePresignedUriRequest.Method)
            {
                case SignHttpMethod.Get:
                    request.Method = HttpMethod.Get;
                    break;
                case SignHttpMethod.Put:
                    request.Method = HttpMethod.Put;
                    break;
                default:
                    throw new ArgumentException("Unsupported http method.");
            }

            if (!string.IsNullOrEmpty(generatePresignedUriRequest.ContentType))
                request.Headers.Add(HttpHeaders.ContentType, generatePresignedUriRequest.ContentType);
            if (!string.IsNullOrEmpty(generatePresignedUriRequest.ContentMd5))
                request.Headers.Add(HttpHeaders.ContentMd5, generatePresignedUriRequest.ContentMd5);
            if (!string.IsNullOrEmpty(generatePresignedUriRequest.Callback))
                request.Headers.Add(HttpHeaders.Callback, generatePresignedUriRequest.Callback);
            if (!string.IsNullOrEmpty(generatePresignedUriRequest.CallbackVar))
                request.Headers.Add(HttpHeaders.CallbackVar, generatePresignedUriRequest.CallbackVar);

            foreach (var pair in generatePresignedUriRequest.UserMetadata)
                request.Headers.Add(OssHeaders.OssUserMetaPrefix + pair.Key, pair.Value);

            if (generatePresignedUriRequest.ResponseHeaders != null)
                generatePresignedUriRequest.ResponseHeaders.Populate(request.Parameters);

            foreach (var param in generatePresignedUriRequest.QueryParams)
                request.Parameters.Add(param.Key, param.Value);

            var singer = OssRequestSigner.Create(conf.SignatureVersion);
            singer.Bucket = bucketName;
            singer.Key = key;
            singer.Region = getSignRegion();
            singer.Product = getSignProduct();

            var signingContext = new SigningContext
            {
                Credentials = _credsProvider.GetCredentials(),
                Expiration = generatePresignedUriRequest.Expiration,
            };

            singer.PreSign(request, signingContext);

            var queryString = HttpUtils.ConbineQueryString(request.Parameters);
            var uriString = request.Endpoint.ToString();
            if (!uriString.EndsWith("/"))
                uriString += "/";
            uriString += request.ResourcePath + "?" + queryString;

            return new Uri(uriString);
        }