114 lines
4.1 KiB
Java
114 lines
4.1 KiB
Java
package net.gepafin.tendermanagement.service.impl;
|
|
|
|
import com.amazonaws.services.s3.AmazonS3;
|
|
import com.amazonaws.services.s3.model.*;
|
|
|
|
import net.gepafin.tendermanagement.config.Translator;
|
|
import net.gepafin.tendermanagement.constants.GepafinConstant;
|
|
import net.gepafin.tendermanagement.model.response.UploadFileOnAmazonS3Response;
|
|
import net.gepafin.tendermanagement.service.AmazonS3Service;
|
|
import net.gepafin.tendermanagement.util.Utils;
|
|
import net.gepafin.tendermanagement.web.rest.api.errors.CustomValidationException;
|
|
import net.gepafin.tendermanagement.web.rest.api.errors.Status;
|
|
|
|
import org.apache.commons.io.FilenameUtils;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
import org.springframework.core.env.Environment;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.web.multipart.MultipartFile;
|
|
|
|
import java.io.IOException;
|
|
import java.io.InputStream;
|
|
import java.util.Arrays;
|
|
import java.util.HashMap;
|
|
import java.util.Map;
|
|
import java.util.Optional;
|
|
|
|
|
|
@Service
|
|
public class AmazonS3ServiceImpl implements AmazonS3Service {
|
|
|
|
@Autowired
|
|
private AmazonS3 amazonS3;
|
|
|
|
@Autowired
|
|
private Environment environment;
|
|
|
|
@Value("${aws.s3.bucket.name}")
|
|
private String bucketName;
|
|
|
|
@Value("${aws.s3.url}")
|
|
private String s3Url;
|
|
|
|
|
|
@Override
|
|
public String upload(String fileName, String s3Folder,
|
|
MultipartFile file) throws IOException {
|
|
|
|
// String path = bucketName+"/"+s3Folder;
|
|
String path = s3Folder +"/"+fileName;
|
|
|
|
InputStream inputStream = file.getInputStream();
|
|
|
|
ObjectMetadata objectMetadata = new ObjectMetadata();
|
|
Map<String, String> metadata = new HashMap<>();
|
|
metadata.put("Content-Type", file.getContentType());
|
|
metadata.put("Content-Length", String.valueOf(file.getSize()));
|
|
|
|
Optional<Map<String, String>> optionalMetaData = Optional.of(metadata);
|
|
optionalMetaData.ifPresent(map -> {
|
|
if (!map.isEmpty()) {
|
|
map.forEach(objectMetadata::addUserMetadata);
|
|
}
|
|
});
|
|
|
|
if(Boolean.FALSE.equals(isTestProfileActivated())) {
|
|
amazonS3.putObject(bucketName, path, inputStream, objectMetadata);
|
|
}
|
|
return s3Url + s3Folder +"/"+ fileName;
|
|
}
|
|
|
|
@Override
|
|
public Boolean delete(String s3Folder, String fileName) {
|
|
String path = s3Folder +"/"+fileName;
|
|
final DeleteObjectRequest deleteObjectRequest = new DeleteObjectRequest(bucketName, path);
|
|
if(Boolean.FALSE.equals(isTestProfileActivated())) {
|
|
amazonS3.deleteObject(deleteObjectRequest);
|
|
}
|
|
return true;
|
|
}
|
|
|
|
public Boolean isTestProfileActivated() {
|
|
String[] activeProfiles = environment.getActiveProfiles();
|
|
return Arrays.stream(activeProfiles).anyMatch("test"::equals);
|
|
}
|
|
|
|
@Override
|
|
public InputStream getFile(String s3Folder, String filePath) throws IOException {
|
|
try {
|
|
String path = s3Folder +"/"+filePath;
|
|
GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName, path);
|
|
S3Object s3Object = amazonS3.getObject(getObjectRequest);
|
|
return s3Object.getObjectContent();
|
|
} catch (AmazonS3Exception e) {
|
|
throw new IOException("Error getting file from Amazon S3", e);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public UploadFileOnAmazonS3Response uploadFileOnAmazonS3(String s3Folder, MultipartFile file) {
|
|
String extension = FilenameUtils.getExtension(file.getOriginalFilename());
|
|
String fileName = org.springframework.util.StringUtils.cleanPath(file.getOriginalFilename());
|
|
String firstNameContain = fileName.substring(0, fileName.lastIndexOf('.'));
|
|
firstNameContain+=Utils.randomKey(5);
|
|
fileName = (firstNameContain + "." + extension);
|
|
try {
|
|
String filepath = upload(fileName, s3Folder, file);
|
|
return UploadFileOnAmazonS3Response.builder().fileName(fileName).filePath(filepath).build();
|
|
} catch (Exception e) {
|
|
throw new CustomValidationException(Status.VALIDATION_ERROR,
|
|
Translator.toLocale(GepafinConstant.UPLOAD_ERROR_S3));
|
|
}
|
|
}
|
|
} |