View Javadoc
1   package org.petify.image.service;
2   
3   import com.amazonaws.services.s3.AmazonS3;
4   import com.amazonaws.services.s3.model.CannedAccessControlList;
5   import com.amazonaws.services.s3.model.ListObjectsV2Result;
6   import com.amazonaws.services.s3.model.ObjectMetadata;
7   import com.amazonaws.services.s3.model.PutObjectRequest;
8   import com.amazonaws.services.s3.model.S3ObjectSummary;
9   import lombok.RequiredArgsConstructor;
10  import org.springframework.stereotype.Service;
11  import org.springframework.web.multipart.MultipartFile;
12  
13  import java.io.IOException;
14  import java.util.List;
15  import java.util.UUID;
16  
17  @RequiredArgsConstructor
18  @Service
19  public class StorageService {
20      private final AmazonS3 space;
21      private static final String bucketName = "petify";
22  
23      public List<String> getImageFileNames() {
24          ListObjectsV2Result result = space.listObjectsV2(bucketName);
25          List<S3ObjectSummary> objects = result.getObjectSummaries();
26  
27          return objects.stream()
28                  .map(S3ObjectSummary::getKey).toList();
29      }
30  
31      public String uploadImage(MultipartFile file) {
32          try {
33              ObjectMetadata objectMetadata = new ObjectMetadata();
34              objectMetadata.setContentType(file.getContentType());
35              String fileName = generateImageName();
36              space.putObject(new PutObjectRequest(bucketName, fileName, file.getInputStream(), objectMetadata)
37                      .withCannedAcl(CannedAccessControlList.PublicRead));
38              return fileName;
39          } catch (IOException e) {
40              throw new RuntimeException(e);
41          }
42      }
43  
44      public boolean deleteImage(String imageName) {
45          try {
46              if (space.doesObjectExist(bucketName, imageName)) {
47                  space.deleteObject(bucketName, imageName);
48                  return true;
49              }
50              return false;
51          } catch (Exception e) {
52              throw new RuntimeException("Failed to delete image " + imageName, e);
53          }
54      }
55  
56      private String generateImageName() {
57          return UUID.randomUUID().toString();
58      }
59  }