private String presignedUrlsV2()

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