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);
}