in s3-artifact-storage-server/src/main/java/jetbrains/buildServer/artifacts/s3/web/S3PreSignedUrlController.java [250:300]
private String presignedUrlsV2(@NotNull final PresignedUrlListRequestDto requestList,
@NotNull final CloudFrontSettings settings) {
String multipartContentType = requestList.getMultipartContentType();
final List<PresignedUrlDto> responses = requestList.getPresignedUrlRequests().stream().map(request -> {
try {
if (request.getDigests() != null && request.getDigests().size() > 1) {
String uploadId;
if (request.getUploadId() == null) {
uploadId = myPreSignedManager.startMultipartUpload(request.getObjectKey(), multipartContentType, settings);
} else {
uploadId = request.getUploadId();
}
final List<PresignedUrlPartDto> presignedUrls = new ArrayList<>();
for (int i = 0; i < request.getDigests().size(); i++) {
final String digest = request.getDigests().get(i);
int partNumber = i + 1;
try {
final String url = myPreSignedManager.generateUploadUrlForPart(request.getObjectKey(), digest, partNumber, uploadId, settings);
presignedUrls.add(new PresignedUrlPartDto(url, partNumber));
} catch (IOException e) {
LOG.infoAndDebugDetails(() -> "Got exception while trying to generate presigned url for part: " + e.getMessage(), e);
throw new RuntimeException(e);
}
}
return PresignedUrlDto.multiPart(request.getObjectKey(), uploadId, presignedUrls);
} else if (request.getNumberOfParts() > 1) {
final String uploadId = myPreSignedManager.startMultipartUpload(request.getObjectKey(), multipartContentType, settings);
final List<PresignedUrlPartDto> presignedUrls = IntStream.rangeClosed(1, request.getNumberOfParts()).mapToObj(partNumber -> {
try {
return new PresignedUrlPartDto(myPreSignedManager.generateUploadUrlForPart(request.getObjectKey(), null, partNumber, uploadId, settings), partNumber);
} catch (IOException e) {
LOG.infoAndDebugDetails(() -> "Got exception while trying to generate presigned url for part: " + e.getMessage(), e);
throw new RuntimeException(e);
}
}).collect(Collectors.toList());
return PresignedUrlDto.multiPart(request.getObjectKey(), uploadId, presignedUrls);
} else if (request.getDigests() != null && request.getDigests().size() == 1) {
return PresignedUrlDto.singlePart(request.getObjectKey(), myPreSignedManager.generateUploadUrl(request.getObjectKey(), request.getDigests().get(0), settings));
} else if (request.getHttpMethod() != null) {
PresignedUrlWithTtl presignedUrlWithTtl = myPreSignedManager.generateDownloadUrl(SdkHttpMethod.valueOf(request.getHttpMethod()), request.getObjectKey(), settings);
return PresignedUrlDto.singlePart(request.getObjectKey(), presignedUrlWithTtl.getUrl());
} else {
return PresignedUrlDto.singlePart(request.getObjectKey(), myPreSignedManager.generateUploadUrl(request.getObjectKey(), null, settings));
}
} catch (Exception e) {
LOG.infoAndDebugDetails(() -> "Got exception while trying to generate presigned url: " + e.getMessage(), e);
throw new RuntimeException(e);
}
}).collect(Collectors.toList());
return serializeResponseV2(PresignedUrlListResponseDto.createV2(responses));
}