WANT TO UPLOAD/ READ A FILE INTO/ FROM YOUR AWS S3 BUCKET, HERE IS A CODE SNIPPET
For any query/ suggestion drop me a note at vats.namit@gmail.com
HAPPY CODING!
import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Writer;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import com.amazonaws.AmazonClientException;
import com.amazonaws.ClientConfiguration;
import com.amazonaws.Protocol;
import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.AWSCredentialsProvider;
import com.amazonaws.auth.InstanceProfileCredentialsProvider;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Region;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3Client;
import com.amazonaws.services.s3.model.CannedAccessControlList;
import com.amazonaws.services.s3.model.GetObjectRequest;
import com.amazonaws.services.s3.model.PutObjectRequest;
import com.amazonaws.services.s3.model.S3Object;
import com.google.common.io.Files;
public class S3Handler {
 static AmazonS3 s3;
 final static EnvironmentProperty environmentProperty = new EnvironmentProperty();
 private final static Logger logger = LogManager.getLogger(S3Handler.class);
 // member variables
 private String s3BucketName;
 private File uploadFile;
 private String fileName;
 // Constructor for handling upload
 public S3Handler(String bucketName, File file) throws Exception {
  init();
  setS3BucketName(bucketName);
  setUploadFile(file);
  setFileName(file.getName());
 }
 // Constructor for handling retrieval
 public S3Handler(String bucketName, String fileName) throws Exception {
  init();
  setS3BucketName(bucketName);
  setFileName(fileName);
 }
 // Initialize
 private static void init() throws Exception {
  String credentialFile = "";
     if(SystemProperty.getenv().containsKey(environmentProperty.getProperty("environment.credential.file.keyword"))) {
      credentialFile = SystemProperty.getenv(environmentProperty.getProperty("environment.credential.file.keyword"));
     }
  if (credentialFile.equals(null) || credentialFile.isEmpty() || credentialFile.equals("")) {
   credentialFile = "FileNotExist";
  }
  AWSCredentials credentials = null;
  AWSCredentialsProvider credentialsProvider;
  File file = new File(credentialFile);
  ClientConfiguration clientConfig = new ClientConfiguration();
  clientConfig.setProtocol(Protocol.HTTP);
  clientConfig.setConnectionTimeout(0);
     clientConfig.setSocketTimeout(0);
  if (file.exists()) {
   credentialsProvider = new ProfileCredentialsProvider(credentialFile, "default");
   try {
    credentials = credentialsProvider.getCredentials();
   } catch (Exception e) {
    throw new AmazonClientException("Cannot load the credentials from the credential profiles file. "
      + "Please make sure that your credentials file is at the correct " + "location ("
      + credentialFile + "), and is in valid format.", e);
   }
   s3 = new AmazonS3Client(credentials, clientConfig);
  } else {
   credentialsProvider = new InstanceProfileCredentialsProvider();
   credentials = credentialsProvider.getCredentials();
   s3 = new AmazonS3Client(credentials, clientConfig);
  }
  String regionName = environmentProperty.getProperty("environment.region.name");
  Region region = Region.getRegion(Regions.fromName(regionName));
  s3.setRegion(region);
  logger.info("S3 Client has been created...");
  logger.info("Region is " + region.getName());
 }
 // setters-getters
 public String getS3BucketName() {
  return s3BucketName;
 }
 public void setS3BucketName(String s3BucketName) {
  this.s3BucketName = s3BucketName;
 }
 public File getUploadFile() {
  return uploadFile;
 }
 public void setUploadFile(File upFile) {
  this.uploadFile = upFile;
 }
 public String getFileName() {
  return fileName;
 }
 public void setFileName(String fileName) {
  this.fileName = fileName;
 }
 // methods
 /**
  * method for uploading file to S3 uses the attributes set while invoking
  * respective constructor
  */
 public void uploadToS3() {
  PutObjectRequest putObjectRequest = new PutObjectRequest(getS3BucketName(), getFileName(), getUploadFile())
    .withSdkClientExecutionTimeout(Integer.valueOf(environmentProperty.getProperty("s3.clientExecution.Timeout")));
  s3.putObject(putObjectRequest.withCannedAcl(CannedAccessControlList.Private));
  logger.info("Upload to S3 bucket - " + getS3BucketName() + " over!");
 }
 /**
  * method for retrieving file from S3 uses the attributes set while invoking
  * respective constructor
  * 
  * @return json String
  */
 public String retrieveS3File() {
  S3Object s3object = s3.getObject(new GetObjectRequest(getS3BucketName(), getFileName()));
  logger.info("Content Type  : " + s3object.getObjectMetadata().getContentType());
  logger.info("Content Length: " + s3object.getObjectMetadata().getContentLength());
  BufferedReader reader = new BufferedReader(new InputStreamReader(s3object.getObjectContent()));
  String line;
  StringBuilder output = new StringBuilder();
  try {
   while ((line = reader.readLine()) != null) {
    output.append(line + "\r\n");
   }
  } catch (IOException e) {
   e.printStackTrace();
  }
  logger.info("Retrieval from S3 bucket - " + getS3BucketName() + " over!");
  return output.toString();
 }
 /**
  * Utility to create file, can be used without having s3 client
  * 
  * @param fileName
  * @param sb
  * @return File
  * @throws IOException
  */
 public static File createUploadFile(String fileName, StringBuilder sb) throws IOException {
  File file = new File(Files.createTempDir(), fileName + ".txt");
  file.deleteOnExit();
  Writer writer = new OutputStreamWriter(new FileOutputStream(file));
  if (null != sb && !sb.toString().isEmpty()) {
   writer.write(sb.toString());
  }
  writer.close();
  return file;
 }
}
 
 
No comments:
Post a Comment