Last active
November 15, 2020 12:28
-
-
Save vaibhavdes/a411669aa24c589c8a841e9e33458380 to your computer and use it in GitHub Desktop.
Java - AWS S3 Basic Functionality
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.io.IOException; | |
import org.slf4j.Logger; | |
import org.slf4j.LoggerFactory; | |
import org.springframework.beans.factory.annotation.Autowired; | |
import org.springframework.stereotype.Service; | |
import org.springframework.web.multipart.MultipartFile; | |
import com.amazonaws.AmazonServiceException; | |
import com.amazonaws.services.s3.AmazonS3; | |
import com.amazonaws.services.s3.model.GetObjectRequest; | |
import com.amazonaws.services.s3.model.ObjectMetadata; | |
import com.amazonaws.services.s3.model.PutObjectRequest; | |
import com.amazonaws.services.s3.model.S3Object; | |
import com.amazonaws.services.s3.model.S3ObjectInputStream; | |
import com.amazonaws.util.IOUtils; | |
@Service | |
public class S3OperationImpl { | |
private Logger LOGGER = LoggerFactory.getLogger(S3OperationImpl.class); | |
@Autowired | |
AmazonS3 s3client; | |
// OBJECT LEVEL API | |
@Override | |
public void uploadSingleFile(String bucketName, String fileName, MultipartFile file) { | |
LOGGER.info(" --- Uploading a new file to S3 Bucket --- "); | |
if (s3client.doesBucketExistV2(bucketName)) { | |
try { | |
ObjectMetadata metadata = new ObjectMetadata(); | |
metadata.setContentLength(file.getSize()); | |
s3client.putObject(new PutObjectRequest(bucketName, fileName, file.getInputStream(), metadata)); | |
} catch (IOException e) { | |
LOGGER.error("IOException: " + e.getMessage()); | |
} catch (AmazonServiceException a) { | |
LOGGER.info("Error Message: " + a.getMessage()); | |
LOGGER.info("HTTP Status Code: " + a.getStatusCode()); | |
LOGGER.info("AWS Error Code: " + a.getErrorCode()); | |
LOGGER.info("Error Type: " + a.getErrorType()); | |
LOGGER.info("Request ID: " + a.getRequestId()); | |
} | |
} | |
} | |
@Override | |
public void uploadMultipleFile(String bucketName, MultipartFile[] files) { | |
LOGGER.info(" --- Uploading a new files to S3 Bucket --- "); | |
try { | |
for (MultipartFile file : files) { | |
String fileName = file.getOriginalFilename(); | |
ObjectMetadata metadata = new ObjectMetadata(); | |
metadata.setContentLength(file.getSize()); | |
s3client.putObject(new PutObjectRequest(bucketName, fileName, file.getInputStream(), metadata)); | |
} | |
} catch (IOException e) { | |
LOGGER.error("IOException: " + e.getMessage()); | |
} catch (AmazonServiceException a) { | |
LOGGER.info("Error Message: " + a.getMessage()); | |
LOGGER.info("HTTP Status Code: " + a.getStatusCode()); | |
LOGGER.info("AWS Error Code: " + a.getErrorCode()); | |
LOGGER.info("Error Type: " + a.getErrorType()); | |
LOGGER.info("Request ID: " + a.getRequestId()); | |
} | |
} | |
@Override | |
public void uploadFileWithProgressBar(String bucketName, String fileName, MultipartFile file) { | |
LOGGER.info(" --- Uploading a new file to S3 Bucket --- "); | |
if (!s3client.doesBucketExistV2(bucketName)) | |
bucket.createBucket(bucketName); | |
try { | |
ObjectMetadata metadata = new ObjectMetadata(); | |
metadata.setContentLength(file.getSize()); | |
// Track Upload Progress | |
TransferManager tm = TransferManagerBuilder.standard().withS3Client(s3client).build(); | |
PutObjectRequest request = new PutObjectRequest(bucketName, fileName, file.getInputStream(), metadata); | |
// To receive notifications when bytes are transferred, add a | |
// ProgressListener to your request. | |
request.setGeneralProgressListener(new ProgressListener() { | |
public void progressChanged(ProgressEvent progressEvent) { | |
System.out.println("Transferred bytes: " + progressEvent.getBytesTransferred()); | |
} | |
}); | |
// TransferManager processes all transfers asynchronously, | |
// so this call returns immediately. | |
Upload upload = tm.upload(request); | |
// Optionally, you can wait for the upload to finish before continuing. | |
upload.waitForCompletion(); | |
} catch (IOException e) { | |
LOGGER.error("IOException: " + e.getMessage()); | |
} catch (AmazonServiceException a) { | |
LOGGER.info("Error Message: " + a.getMessage()); | |
LOGGER.info("HTTP Status Code: " + a.getStatusCode()); | |
LOGGER.info("AWS Error Code: " + a.getErrorCode()); | |
LOGGER.info("Error Type: " + a.getErrorType()); | |
LOGGER.info("Request ID: " + a.getRequestId()); | |
} catch (AmazonClientException e) { | |
e.printStackTrace(); | |
} catch (InterruptedException e) { | |
e.printStackTrace(); | |
} | |
} | |
@Override | |
public void deleteFile(String bucketName, String key) { | |
LOGGER.info(" --- Deleting file from bucket --- "); | |
if (s3client.doesBucketExistV2(bucketName)) { | |
s3client.deleteObject(bucketName, key); | |
} | |
} | |
@Override | |
public byte[] downloadFile(String key, String bucketName) { | |
try { | |
if (s3client.doesBucketExistV2(bucketName)) { | |
LOGGER.info(" --- Downloading an file from bucket --- "); | |
S3Object obj = s3client.getObject(new GetObjectRequest(bucketName, key)); | |
S3ObjectInputStream stream = obj.getObjectContent(); | |
LOGGER.info("Content-Type: " + obj.getObjectMetadata().getContentType()); | |
byte[] content = IOUtils.toByteArray(stream); | |
obj.close(); | |
return content; | |
} | |
} catch (AmazonServiceException a) { | |
LOGGER.info("Error Message: " + a.getMessage()); | |
LOGGER.info("HTTP Status Code: " + a.getStatusCode()); | |
LOGGER.info("AWS Error Code: " + a.getErrorCode()); | |
LOGGER.info("Error Type: " + a.getErrorType()); | |
LOGGER.info("Request ID: " + a.getRequestId()); | |
} | |
return null; | |
} | |
@Override | |
public String downloadFileWithPresignedExpiryURL(String key, String bucketName) { | |
try { | |
// Set the presigned URL to expire after one hour. | |
java.util.Date expiration = new java.util.Date(); | |
long expTimeMillis = expiration.getTime(); | |
expTimeMillis += 1000 * 60 * 60; | |
expiration.setTime(expTimeMillis); | |
GeneratePresignedUrlRequest generatePresignedUrlRequest = new GeneratePresignedUrlRequest(bucketName, key) | |
.withMethod(HttpMethod.GET).withExpiration(expiration); | |
URL url = s3client.generatePresignedUrl(generatePresignedUrlRequest); | |
return url.toString(); | |
} catch (AmazonServiceException e) { | |
// The call was transmitted successfully, but Amazon S3 couldn't process | |
// it, so it returned an error response. | |
e.printStackTrace(); | |
} catch (SdkClientException e) { | |
// Amazon S3 couldn't be contacted for a response, or the client | |
// couldn't parse the response from Amazon S3. | |
e.printStackTrace(); | |
} | |
return null; | |
} | |
public void copyFile(String srcBucket, String srcFileName, String destBucket, String destFileName) { | |
LOGGER.info(" --- Copying a File to Another S3 Bucket --- "); | |
if (s3client.doesBucketExistV2(srcBucket)) { | |
if (s3client.doesBucketExistV2(destBucket)) | |
s3client.copyObject(srcBucket, srcFileName, destBucket, destFileName); | |
} | |
} | |
// BUCKET LEVEL API | |
public List<Bucket> getAllBuckets() { | |
LOGGER.info(" --- Listing Buckets Request --- "); | |
return s3client.listBuckets(); | |
} | |
public Bucket createBucket(String bucketName) { | |
LOGGER.info(" --- Creating bucket " + bucketName + " --- "); | |
return s3client.createBucket(bucketName); | |
} | |
public void deleteBucket(String bucketName) { | |
LOGGER.info(" --- Bucket Delete Request " + bucketName + " --- "); | |
s3client.deleteBucket(bucketName); | |
} | |
public ObjectListing getObjects(String bucketName) { | |
LOGGER.info(" --- Bucket Object Information " + bucketName + " --- "); | |
if (s3client.doesBucketExistV2(bucketName)) { | |
ObjectListing objectListing = s3client.listObjects(new ListObjectsRequest().withBucketName(bucketName)); | |
// Mutiple Filter for search | |
// .withPrefix("thumbnail")); | |
return objectListing; | |
} | |
return null; | |
} | |
public Boolean checkBucket(String bucketName) { | |
LOGGER.info(" --- Checking Bucket Existence " + bucketName + " --- "); | |
if (s3client.doesBucketExistV2(bucketName)) | |
return true; | |
return false; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment