Unable to fix aws S3 and Textract configuration in Springboot

Viewed 42
  @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"

    enter image description here

0 Answers
Related