| /** |
| * FILE: S3Operator.java |
| * PATH: org.datasyslab.babylon.utils.S3Operator.java |
| * Copyright (c) 2015-2017 GeoSpark Development Team |
| * All rights reserved. |
| */ |
| package org.datasyslab.babylon.utils; |
| |
| import com.amazonaws.auth.AWSStaticCredentialsProvider; |
| import com.amazonaws.auth.BasicAWSCredentials; |
| import com.amazonaws.regions.Regions; |
| import com.amazonaws.services.s3.AmazonS3; |
| import com.amazonaws.services.s3.AmazonS3ClientBuilder; |
| import com.amazonaws.services.s3.model.Bucket; |
| import com.amazonaws.services.s3.model.ObjectMetadata; |
| import com.amazonaws.services.s3.model.PutObjectRequest; |
| import com.amazonaws.services.s3.model.S3Object; |
| import org.apache.log4j.Logger; |
| |
| import javax.imageio.ImageIO; |
| import java.awt.image.BufferedImage; |
| import java.io.ByteArrayInputStream; |
| import java.io.ByteArrayOutputStream; |
| import java.io.IOException; |
| import java.io.InputStream; |
| |
| public class S3Operator { |
| |
| private AmazonS3 s3client; |
| |
| public final static Logger logger = Logger.getLogger(S3Operator.class); |
| |
| public S3Operator(String regionName, String accessKey, String secretKey) |
| { |
| Regions region = Regions.fromName(regionName); |
| BasicAWSCredentials awsCreds = new BasicAWSCredentials(accessKey, secretKey); |
| s3client = AmazonS3ClientBuilder.standard().withRegion(region).withCredentials(new AWSStaticCredentialsProvider(awsCreds)).build(); |
| logger.info("[Babylon][Constructor] Initialized a S3 client"); |
| } |
| |
| public boolean createBucket(String bucketName) { |
| Bucket bucket = s3client.createBucket(bucketName); |
| logger.info("[Babylon][createBucket] Created a bucket: " + bucket.toString()); |
| return true; |
| } |
| |
| public boolean deleteImage(String bucketName, String path) { |
| s3client.deleteObject(bucketName, path); |
| logger.info("[Babylon][deleteImage] Deleted an image if exist"); |
| return true; |
| } |
| |
| public boolean putImage(String bucketName, String path, BufferedImage rasterImage) throws IOException { |
| deleteImage(bucketName,path); |
| |
| ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); |
| ImageIO.write(rasterImage, "png", outputStream); |
| byte[] buffer = outputStream.toByteArray(); |
| InputStream inputStream = new ByteArrayInputStream(buffer); |
| ObjectMetadata metadata = new ObjectMetadata(); |
| metadata.setContentLength(buffer.length); |
| s3client.putObject(new PutObjectRequest(bucketName, path, inputStream, metadata)); |
| inputStream.close(); |
| outputStream.close(); |
| logger.info("[Babylon][putImage] Put an image"); |
| return true; |
| } |
| |
| public BufferedImage getImage(String bucketName, String path) throws Exception { |
| logger.debug("[Babylon][getImage] Start"); |
| S3Object s3Object = s3client.getObject(bucketName, path); |
| InputStream inputStream = s3Object.getObjectContent(); |
| BufferedImage rasterImage = ImageIO.read(inputStream); |
| inputStream.close(); |
| s3Object.close(); |
| logger.info("[Babylon][getImage] Got an image"); |
| return rasterImage; |
| } |
| } |