how to upload multiple files and pictures to s3 while keeping the record in database?

30 Views Asked by At

I want to upload some pictures and documents like identity card front and back pictures including that there can also be the witness idenity cards pictures also want to upload some pdf files and want to keep the record of files and pictures according to the user as one user is going to have many files (as mention above) i am confuse how to solve it.

I have tried some solution but can't go forward because of confusion.


import com.amazonaws.services.s3.AmazonS3;
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;
import com.rapidgateway.entity.MerchantDocs;
import com.rapidgateway.repository.MerchantDocsRepository;
import com.rapidgateway.repository.MerchantRepository;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Date;
import java.util.Objects;

@Service
@Slf4j
public class StorageServiceImpl {

    @Value ("${application.bucket.name}")
    private String BUCKET_NAME;

    @Autowired
    private AmazonS3 s3Client;
    @Autowired
    private MerchantDocsRepository merchantDocsRepository;
    public String uploadFile(MultipartFile file) throws IOException {
        File fileObj=convertMultiPartFileToFile(file);
        String fileName = new Date().getTime() + "-" + file.getOriginalFilename();
      s3Client.putObject (new PutObjectRequest (BUCKET_NAME,fileName,fileObj));
        fileObj.delete();
        return s3Client.getUrl(BUCKET_NAME, fileName).toString();
    }

//    public void uploadMerchantDocs(MerchantDocs merchantDocs, MultipartFile cnicFront, MultipartFile cnicBack, MultipartFile bankMaintenanceCert, MultipartFile proofOfBusiness) throws IOException {
//        merchantDocs.setCnicFront(uploadFile(cnicFront));
//        merchantDocs.setCnicBack(uploadFile(cnicBack));
//        merchantDocs.setBankMaintenanceCert(uploadFile(bankMaintenanceCert));
//        merchantDocs.setProofOfBusiness(uploadFile(proofOfBusiness));
//        merchantDocsRepository.save(merchantDocs);
//    }

    public void uploadMerchantDocs(MerchantDocs merchantDocs) {
        merchantDocsRepository.save(merchantDocs);
    }

    public byte[] downloadFile(String fileName) {
        S3Object s3Object = s3Client.getObject(BUCKET_NAME, fileName);
        S3ObjectInputStream inputStream = s3Object.getObjectContent();
        try {
            byte[] content = IOUtils.toByteArray(inputStream);
            return content;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    public String deleteFile(String fileName) {
        s3Client.deleteObject(BUCKET_NAME, fileName);
        return fileName + " removed ...";
    }

    private File convertMultiPartFileToFile(MultipartFile file) {
        File convertedFile = new File(Objects.requireNonNull (file.getOriginalFilename ()));
        try (FileOutputStream fos = new FileOutputStream(convertedFile)) {
            fos.write(file.getBytes());
        } catch (IOException e) {
            log.error("Error converting multipartFile to file", e);
        }
        return convertedFile;
    }
}````
**Controller**
public ResponseEntity<String> uploadMerchantDocs(@RequestParam("merchantDocs") String merchantDocsStr,
                                                 @RequestParam("cnicFront") MultipartFile cnicFront,
                                                 @RequestParam("cnicBack") MultipartFile cnicBack,
                                                 @RequestParam("bankMaintenanceCert") MultipartFile bankMaintenanceCert,
                                                 @RequestParam("proofOfBusiness") MultipartFile proofOfBusiness) {
    try {
        ObjectMapper objectMapper = new ObjectMapper();
        MerchantDocs merchantDocs = objectMapper.readValue(merchantDocsStr, MerchantDocs.class);

        // Set documentId and merchantId
        merchantDocs.setDocumentId(merchantDocs.getDocumentId ());
        merchantDocs.setMerchantId(merchantDocs.getMerchantId ());

        // Convert MultipartFile to byte array and set in MerchantDocs entity
        merchantDocs.setCnicFront(cnicFront.getBytes());
        merchantDocs.setCnicBack(cnicBack.getBytes());
        merchantDocs.setBankMaintenanceCert(bankMaintenanceCert.getBytes());
        merchantDocs.setProofOfBusiness(proofOfBusiness.getBytes());

        storageService.uploadMerchantDocs(merchantDocs);
        return ResponseEntity.ok("Files uploaded successfully and URLs saved in MerchantDocs.");
    } catch (IOException e) {
        return ResponseEntity.badRequest().body("Error occurred while uploading files: " + e.getMessage());
    }
}````
0

There are 0 best solutions below