Untitled
vas
plain_text
a year ago
7.3 kB
7
Indexable
Sessionsaurora-cdx-s3-svc > com.convatec.filemgmt.service > FileMgmtService.java
FileMgmtService.java
package com.convatec.filemgmt.service;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map.Entry;
import com.convatec.filemgmt.util.Utils;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.io.IOUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.model.GetObjectRequest;
import com.amazonaws.services.s3.model.ListObjectsRequest;
import com.amazonaws.services.s3.model.ListObjectsV2Result;
import com.amazonaws.services.s3.model.ObjectListing;
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.services.s3.model.S3ObjectSummary;
import com.convatec.filemgmt.FileMgmtApplication;
import com.convatec.filemgmt.exceptions.FileDownloadException;
import com.convatec.filemgmt.exceptions.FileUploadException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.JsonNodeFactory;
@Service
public class FileMgmtService implements IFileMgmtService {
private final AwsS3ClientBuilderService awsS3ClientBuilderService;
@Autowired
public FileMgmtService(AwsS3ClientBuilderService awsS3ClientBuilderService) {
this.awsS3ClientBuilderService = awsS3ClientBuilderService;
}
@Override
public String uploadFile(String bucket, String Objectkey, MultipartFile multipartFile)
throws FileUploadException, IOException {
JsonNode keys = getSecrets(bucket);
String bucketId = keys.get("bucket").asText();
final AmazonS3 s3Client = awsS3ClientBuilderService.createAwsS3Client(keys.get("api_key").asText(),
keys.get("secret_key").asText(), Regions.US_EAST_1);
String multipartFileName = Utils.sanitizeFilename(multipartFile.getOriginalFilename());
// convert multipart file to a file
File file = new File(multipartFileName);
try (FileOutputStream fileOutputStream = new FileOutputStream(file)) {
fileOutputStream.write(multipartFile.getBytes());
}
// generate file name
String fileName = generateFileName(multipartFile);
// upload file
PutObjectRequest request = new PutObjectRequest(bucketId, Objectkey, file);
ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentType("plain/" + FilenameUtils.getExtension(multipartFileName));
metadata.addUserMetadata("Title", "File Upload - " + fileName);
metadata.setContentLength(file.length());
request.setMetadata(metadata);
s3Client.putObject(request);
URL s3Url = s3Client.getUrl(bucketId, Objectkey);
this.awsS3ClientBuilderService.shutdown(s3Client);
file.delete();
return s3Url.toExternalForm();
}
@Override
public byte[] downloadFile(String bucket, String fileName) throws FileDownloadException, IOException {
JsonNode keys = getSecrets(bucket);
String bucketId = keys.get("bucket").asText();
final AmazonS3 s3Client = awsS3ClientBuilderService.createAwsS3Client(keys.get("api_key").asText(),
keys.get("secret_key").asText(), Regions.US_EAST_1);
if (bucketIsEmpty(s3Client, bucketId)) {
this.awsS3ClientBuilderService.shutdown(s3Client);
throw new FileDownloadException("Requested bucket does not exist or is empty");
}
GetObjectRequest getObjectRequest = new GetObjectRequest(bucketId, fileName);
S3Object s3Object = s3Client.getObject(getObjectRequest);
S3ObjectInputStream objectInputStream = s3Object.getObjectContent();
byte[] bytes = IOUtils.toByteArray(objectInputStream);
this.awsS3ClientBuilderService.shutdown(s3Client);
if (bytes != null && bytes.length != 0) {
return bytes;
} else {
throw new FileDownloadException("Could not find the file!");
}
}
@Override
public boolean delete(String bucket, String fileName) throws FileDownloadException {
JsonNode keys = getSecrets(bucket);
String bucketId = keys.get("bucket").asText();
final AmazonS3 s3Client = awsS3ClientBuilderService.createAwsS3Client(keys.get("api_key").asText(),
keys.get("secret_key").asText(), Regions.US_EAST_1);
if (bucketIsEmpty(s3Client, bucketId)) {
throw new FileDownloadException("Requested bucket does not exist or is empty");
}
s3Client.deleteObject(bucketId, fileName);
this.awsS3ClientBuilderService.shutdown(s3Client);
return true;
}
public List<String> listFiles(String bucket) throws FileDownloadException {
JsonNode keys = getSecrets(bucket);
String bucketId = keys.get("bucket").asText();
final AmazonS3 s3Client = awsS3ClientBuilderService.createAwsS3Client(keys.get("api_key").asText(),
keys.get("secret_key").asText(), Regions.US_EAST_1);
if (bucketIsEmpty(s3Client, bucketId)) {
throw new FileDownloadException("Requested bucket does not exist or is empty");
}
ListObjectsRequest listObjectsRequest = new ListObjectsRequest().withBucketName(bucketId);
ObjectListing objectListing;
List<String> summaryList = new ArrayList<String>();
do {
objectListing = s3Client.listObjects(listObjectsRequest);
for (S3ObjectSummary objectSummary : objectListing.getObjectSummaries()) {
summaryList.add(objectSummary.getKey());
}
listObjectsRequest.setMarker(objectListing.getNextMarker());
} while (objectListing.isTruncated());
this.awsS3ClientBuilderService.shutdown(s3Client);
return summaryList;
}
private boolean bucketIsEmpty(AmazonS3 s3Client, String bucketName) {
ListObjectsV2Result result = s3Client.listObjectsV2(bucketName);
if (result == null) {
return false;
}
List<S3ObjectSummary> objects = result.getObjectSummaries();
return objects.isEmpty();
}
private String generateFileName(MultipartFile multiPart) {
return new Date().getTime() + "-" + multiPart.getOriginalFilename().replace(" ", "_");
}
private JsonNode getSecrets(String key) {
for (Entry<String, JsonNode> entry : FileMgmtApplication.vaultVariablesMap.entrySet()) {
if (entry.getKey().contains(key))
return entry.getValue();
}
return JsonNodeFactory.instance.objectNode();
}
}
Created with JaCoCo 0.8.12.202403310830Editor is loading...
Leave a Comment