in src/main/java/com/aliyun/oss/internal/OSSObjectOperation.java [1356:1430]
public URL generatePresignedUrl(GeneratePresignedUrlRequest request) throws ClientException {
assertParameterNotNull(request, "request");
assertStringNotNullOrEmpty(request.getBucketName(), "bucket");
ensureBucketNameValid(request.getBucketName());
assertParameterNotNull(request.getKey(), "key");
ensureObjectKeyValid(request.getKey());
assertParameterNotNull(request.getExpiration(), "expiration");
Credentials credentials = credsProvider.getCredentials();
assertParameterNotNull(credentials, "credentials");
String bucketName = request.getBucketName();
boolean useSecurityToken = credentials.useSecurityToken();
HttpMethod method = request.getMethod() != null ? request.getMethod() : HttpMethod.GET;
String key = request.getKey();
String resourcePath = OSSUtils.determineResourcePath(bucketName, key, client.getClientConfiguration().isSLDEnabled());
RequestMessage requestMessage = new RequestMessage(bucketName, key);
requestMessage.setEndpoint(OSSUtils.determineFinalEndpoint(endpoint, bucketName, client.getClientConfiguration()));
requestMessage.setMethod(method);
requestMessage.setResourcePath(resourcePath);
requestMessage.setHeaders(request.getHeaders());
if (request.getContentType() != null && !request.getContentType().trim().equals("")) {
requestMessage.addHeader(HttpHeaders.CONTENT_TYPE, request.getContentType());
}
if (request.getContentMD5() != null && !request.getContentMD5().trim().equals("")) {
requestMessage.addHeader(HttpHeaders.CONTENT_MD5, request.getContentMD5());
}
for (Map.Entry<String, String> h : request.getUserMetadata().entrySet()) {
requestMessage.addHeader(OSSHeaders.OSS_USER_METADATA_PREFIX + h.getKey(), h.getValue());
}
Map<String, String> responseHeaderParams = new HashMap<String, String>();
populateResponseHeaderParameters(responseHeaderParams, request.getResponseHeaders());
populateTrafficLimitParams(responseHeaderParams, request.getTrafficLimit());
if (responseHeaderParams.size() > 0) {
requestMessage.setParameters(responseHeaderParams);
}
if (request.getQueryParameter() != null && request.getQueryParameter().size() > 0) {
for (Map.Entry<String, String> entry : request.getQueryParameter().entrySet()) {
requestMessage.addParameter(entry.getKey(), entry.getValue());
}
}
if (request.getProcess() != null && !request.getProcess().trim().equals("")) {
requestMessage.addParameter(RequestParameters.SUBRESOURCE_PROCESS, request.getProcess());
}
String canonicalResource = "/" + ((bucketName != null) ? bucketName + "/" : "") + ((key != null ? key : ""));
OSSSignerParams params = new OSSSignerParams(canonicalResource, credentials);
params.setProduct(product);
params.setRegion(region);
params.setCloudBoxId(cloudBoxId);
params.setExpiration(request.getExpiration());
params.setAdditionalHeaderNames(request.getAdditionalHeaderNames());
RequestPresigner singer = OSSSignerBase.createRequestPresigner(client.getClientConfiguration().getSignatureVersion(), params);
singer.presign(requestMessage);
String queryString = HttpUtil.paramToQueryString(requestMessage.getParameters(), DEFAULT_CHARSET_NAME);
String url = requestMessage.getEndpoint().toString();
if (!url.endsWith("/")) {
url += "/";
}
url += resourcePath + "?" + queryString;
try {
return new URL(url);
} catch (MalformedURLException e) {
throw new ClientException(e);
}
}