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