String sourceDir = getProperty(config, "src_dir");
    SecretKey mySymmetricKey = new SecretKeySpec( Base64.decodeBase64(masterSym 
metricKeyBase64.getBytes()) , "AES");
    EncryptionMaterials materials = new EncryptionMaterials(mySymmetricKey);
    AmazonS3 s3 = new AmazonS3EncryptionClient(credentials, materials);
    s3.setEndpoint(s3Endpoint);
    // Upload all files.
    uploadAllFilesToS3(s3, bucketName, s3Prefix,  new File(sourceDir) );
  }
  private static void uploadAllFilesToS3(AmazonS3 s3, String bucketName, String
 s3Prefix, final File folder) {
    System.out.println("Reading files from directory "+folder);
    for (final File fileEntry : folder.listFiles()) {
      if (! fileEntry.isDirectory()) { // Skip sub directories.
        int retryCount = 0;  
        boolean done = false;
        while ( !done ) {
          try {
            uploadToS3(s3, bucketName, s3Prefix, fileEntry);
            done = true;
          }catch (Exception e ){
            retryCount++;
            if ( retryCount > MAX_RETRY_COUNT ) {
              System.out.println("Retry count exceeded max retry count 
"+MAX_RETRY_COUNT+". Giving up");
              throw new RuntimeException(e);
            }
            // Do retry after 10 seconds.
            System.out.println("Failed to upload file "+fileEntry+". Retry 
ing...");
            try {
              Thread.sleep(10 * 1000);
            }catch(Exception te) {}
          }
        }// while
      }// for
    }
  }
  private static void uploadToS3(AmazonS3 s3, String bucketName, String s3Prefix,
 File file) {
    try {
      System.out.println("Uploading a new object to S3 object '"+s3Prefix+"' 
from file "+file);
      String key = s3Prefix+"/"+file.getName();
      s3.putObject(new PutObjectRequest(bucketName, key, file) );
API Version 2012-12-01
122
Amazon Redshift Management Guide
Example: Uploading Client-Side Encrypted Data