in teamcity-s3-sdk/src/main/java/jetbrains/buildServer/artifacts/s3/publish/presigned/upload/TeamCityServerPresignedUrlsProviderClient.java [213:248]
private void finishMultipartUploadImpl(@NotNull String objectKey, @Nullable List<String> etags, @NotNull String uploadId, boolean isSuccessful)
throws IOException, URISyntaxException, ExecutionException, InterruptedException {
final HTTPRequestBuilder post = postTemplate();
final List<Pair<String, String>> parameters = getParameters(objectKey, etags, uploadId, isSuccessful);
post
.withData(new EntityProducer() {
@Override
public HttpEntity entity4() {
try {
final MultipartEntity multipartEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
for (Pair<String, String> entry : parameters) {
multipartEntity.addPart(entry.getFirst(), new StringBody(entry.getSecond()));
}
return multipartEntity;
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
}
@Override
public RequestEntity entity3() {
Part[] parts = parameters.stream()
.map(entry -> new StringPart(entry.getFirst(), entry.getSecond()))
.collect(Collectors.toList()).toArray(new Part[0]);
return new MultipartRequestEntity(parts, new HttpMethodParams());
}
});
try {
HttpClientUtil.executeAndReleaseConnection(post, myErrorHandler).get();
LOGGER.debug(() -> "Multipart upload " + uploadId + " signaling " + (isSuccessful ? "success" : "failure") + " finished");
} catch (Exception e) {
LOGGER.warnAndDebugDetails("Multipart upload " + uploadId + " signaling " + (isSuccessful ? "success" : "failure") + " failed: " + e.getMessage(), e);
throw e;
}
}