code: public RetrievedContent getContent(String spaceId, String contentId, String range) {
          log.debug("getContent(" + spaceId + ", " + contentId + ", " + range + ")");
  
          // Will throw if bucket does not exist
          String bucketName = getBucketName(spaceId);
  
          try {
              GetObjectRequest getRequest = new GetObjectRequest(bucketName, contentId);
              if (StringUtils.isNotEmpty(range)) {
                  ContentByteRange byteRange = new ContentByteRange(range);
                  if (null == byteRange.getRangeStart()) {
                      // While this should be a valid setting, it is not currently
                      // supported due to a limitation of the AWS S3 client
                      // see: https://github.com/aws/aws-sdk-java/issues/1551
                      throw new IllegalArgumentException(byteRange.getUsage(range));
                  } else if (null == byteRange.getRangeEnd()) {
                      getRequest.setRange(byteRange.getRangeStart());
                  } else {
                      getRequest.setRange(byteRange.getRangeStart(),
                                          byteRange.getRangeEnd());
                  }
              }
  
              S3Object contentItem = s3Client.getObject(getRequest);
  
              RetrievedContent retrievedContent = new RetrievedContent();
              retrievedContent.setContentStream(contentItem.getObjectContent());
              retrievedContent.setContentProperties(prepContentProperties(contentItem.getObjectMetadata()));
  
              return retrievedContent;
          } catch (AmazonClientException e) {
              throwIfContentNotExist(bucketName, contentId);
              String err = "Could not retrieve content " + contentId + " in S3 bucket " +
                           bucketName + " due to error: " + e.getMessage();
              throw new StorageException(err, e, RETRY);
          }
      }
docs: {@inheritDoc}