@Override
public Map<String, String> uploadCustomerInvoiceImg(Long policyId,MultipartFile file) throws Throwable {
UserPolicy policy = userPolicyRepository.findById(policyId).orElse(null);
if (policy == null) {
throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "Invalid Id");
}
if (file != null) {
String url = amazonClient.uploadFolderSpecify(file, "invoice");
policy.setInvoiceImg(url);
TextractClient textractClient = TextractClient.builder()
.region(Region.AP_SOUTH_1).build();
try {
read = file.getInputStream().read();
S3Object s3Object = S3Object.builder()
.bucket("fyxitapp-dev")
.name(file.getName())
.build();
Document myDoc = Document.builder().
s3Object( s3Object)
.build();
DetectDocumentTextRequest detectDocumentTextRequest = DetectDocumentTextRequest.builder()
.document(myDoc)
.build();
DetectDocumentTextResponse textResponse = textractClient.detectDocumentText(detectDocumentTextRequest);
List<Block> docInfo = textResponse.blocks();
for (Block block : docInfo) {
System.out.println("The block type is " + block.blockType().toString());
}
}
catch (TextractException e) {
System.err.println(e.getMessage());
System.exit(1);
}
}
Map<String, String> response = new HashMap<>();
response.put("message", "success");
return response;
}
> AWSClient Class
public class AmazonClient {
@Autowired
private org.springframework.core.env.Environment environment;
private AmazonS3 s3client;
@Value("${aws.s3.url}")
private String endpointUrl;
@Value("${aws.s3.audio.bucket}")
private String bucketName;
@Value("${aws.access.key.id}")
private String accessKey;
@Value("${aws.access.key.secret}")
private String secretKey;
@PostConstruct
private void initializeAmazon() {
AWSCredentials credentials = new BasicAWSCredentials(this.accessKey, this.secretKey);
this.s3client = new AmazonS3Client(credentials);
}
private void uploadIconsTos3bucket(String fileName, File file) {
s3client.putObject(new PutObjectRequest(bucketName + "/icons", fileName, file)
.withCannedAcl(CannedAccessControlList.PublicRead));
}
public String uploadFolderSpecify(MultipartFile multipartFile, String folder) {
String fileUrl = "";
try {
File file = convertMultiPartToFile(multipartFile);
String fileName = generateFileName(multipartFile);
fileUrl = endpointUrl + folder + "/" + fileName;
uploadFolderSpecifyTos3bucket(fileName, folder, file);
file.delete();
} catch (Exception e) {
e.printStackTrace();
}
return fileUrl;
}
public String uploadFolderSpecify(File file, String folder) {
String fileUrl = "";
String fileName = file.getName();
fileUrl = endpointUrl + folder + "/" + fileName;
uploadFolderSpecifyTos3bucket(fileName, folder, file);
return fileUrl;
}
private void uploadFolderSpecifyTos3bucket(String fileName, String folder, File file) {
s3client.putObject(new PutObjectRequest(bucketName + "/" + folder, fileName, file)
.withCannedAcl(CannedAccessControlList.PublicRead));
}
private File convertMultiPartToFile(MultipartFile file) throws IOException {
File convFile = new File(file.getOriginalFilename());
FileOutputStream fos = new FileOutputStream(convFile);
fos.write(file.getBytes());
fos.close();
return convFile;
}
private String generateFileName(MultipartFile multiPart) {
return new Date().getTime() + "-" + multiPart.getOriginalFilename().replace(" ", "_");
}
private void uploadFileTos3bucket(String fileName, File file) {
s3client.putObject(new PutObjectRequest(bucketName + "/pics", fileName, file)
.withCannedAcl(CannedAccessControlList.PublicRead));
}
public String deleteFileFromS3Bucket(String fileUrl) {
///
ObjectListing listing = s3client.listObjects(bucketName, "ra");
List<S3ObjectSummary> summaries = listing.getObjectSummaries();
while (listing.isTruncated()) {
listing = s3client.listNextBatchOfObjects(listing);
System.out.println("hello");
System.out.println(listing.getObjectSummaries());
summaries.addAll(listing.getObjectSummaries());
}
String fileName = fileUrl.substring(fileUrl.lastIndexOf("/") + 1);
s3client.deleteObject(new DeleteObjectRequest(bucketName, fileName));
return "Successfully deleted";
}
}
-
Unable to load credentials from any of the providers in the chain AwsCredentialsProviderChain(credentialsProviders=[SystemPropertyCredentialsProvider(), EnvironmentVariableCredentialsProvider(), WebIdentityTokenCredentialsProvider(), ProfileCredentialsProvider(profileName=default, profileFile=ProfileFile(profilesAndSectionsMap=[])), ContainerCredentialsProvider(), InstanceProfileCredentialsProvider()]) : [SystemPropertyCredentialsProvider(): Unable to load credentials from system settings. Access key must be specified either via environment variable (AWS_ACCESS_KEY_ID) or system property (aws.accessKeyId)., EnvironmentVariableCredentialsProvider(): Unable to load credentials from system settings. Access key must be specified either via environment variable (AWS_ACCESS_KEY_ID) or system property (aws.accessKeyId)., WebIdentityTokenCredentialsProvider(): Either the environment variable AWS_WEB_IDENTITY_TOKEN_FILE or the javaproperty aws.webIdentityTokenFile must be set., ProfileCredentialsProvider(profileName=default, profileFile=ProfileFile(profilesAndSectionsMap=[])): Profile file contained no credentials for profile 'default': ProfileFile(profilesAndSectionsMap=[]), ContainerCredentialsProvider(): Cannot fetch credentials from container - neither AWS_CONTAINER_CREDENTIALS_FULL_URI or AWS_CONTAINER_CREDENTIALS_RELATIVE_URI environment variables are set., InstanceProfileCredentialsProvider(): Failed to load credentials from IMDS.]", "path": "/repo/upload/207"