3
3
import dev .ancaghenade .shipmentlistdemo .buckets .BucketName ;
4
4
import dev .ancaghenade .shipmentlistdemo .util .FileUtil ;
5
5
import java .io .IOException ;
6
+ import java .util .ArrayList ;
7
+ import java .util .List ;
6
8
import org .slf4j .Logger ;
7
9
import org .slf4j .LoggerFactory ;
8
10
import org .springframework .beans .factory .annotation .Autowired ;
9
11
import org .springframework .stereotype .Service ;
10
12
import org .springframework .web .multipart .MultipartFile ;
13
+ import software .amazon .awssdk .core .exception .SdkException ;
11
14
import software .amazon .awssdk .core .sync .RequestBody ;
12
15
import software .amazon .awssdk .services .s3 .S3Client ;
16
+ import software .amazon .awssdk .services .s3 .model .DeleteObjectsRequest ;
17
+ import software .amazon .awssdk .services .s3 .model .DeleteObjectsResponse ;
13
18
import software .amazon .awssdk .services .s3 .model .GetObjectRequest ;
14
19
import software .amazon .awssdk .services .s3 .model .NoSuchKeyException ;
20
+ import software .amazon .awssdk .services .s3 .model .ObjectIdentifier ;
15
21
import software .amazon .awssdk .services .s3 .model .PutObjectRequest ;
22
+ import software .amazon .awssdk .services .s3 .model .S3Error ;
23
+ import software .amazon .awssdk .services .s3 .model .S3Object ;
16
24
17
25
@ Service
18
26
public class S3StorageService {
19
27
20
28
private final S3Client s3 ;
21
29
private static final Logger LOGGER = LoggerFactory .getLogger (S3StorageService .class );
22
30
31
+ private final BucketName bucketName ;
23
32
@ Autowired
24
- public S3StorageService (S3Client s3 ) {
33
+ public S3StorageService (S3Client s3 , BucketName bucketName ) {
25
34
this .s3 = s3 ;
35
+ this .bucketName = bucketName ;
26
36
}
27
37
28
38
public void save (String path , String fileName ,
29
39
MultipartFile multipartFile )
30
40
throws IOException {
31
41
PutObjectRequest putObjectRequest = PutObjectRequest .builder ()
32
- .bucket (BucketName . SHIPMENT_PICTURE . getBucketName ())
42
+ .bucket (bucketName . getShipmentPictureBucket ())
33
43
.key (path + "/" + fileName )
34
44
.contentType (multipartFile .getContentType ())
35
45
.contentLength (multipartFile .getSize ())
@@ -42,7 +52,7 @@ public void save(String path, String fileName,
42
52
43
53
public byte [] download (String key ) throws IOException {
44
54
GetObjectRequest getObjectRequest = GetObjectRequest .builder ()
45
- .bucket (BucketName . SHIPMENT_PICTURE . getBucketName ())
55
+ .bucket (bucketName . getShipmentPictureBucket ())
46
56
.key (key )
47
57
.build ();
48
58
byte [] object = new byte [0 ];
@@ -54,4 +64,34 @@ public byte[] download(String key) throws IOException {
54
64
return object ;
55
65
}
56
66
67
+ public void delete (String folderPrefix ) {
68
+ List <ObjectIdentifier > keysToDelete = new ArrayList <>();
69
+ s3 .listObjectsV2Paginator (
70
+ builder -> builder .bucket (bucketName .getShipmentPictureBucket ())
71
+ .prefix (folderPrefix + "/" ))
72
+ .contents ().stream ()
73
+ .map (S3Object ::key )
74
+ .forEach (key -> keysToDelete .add (ObjectIdentifier .builder ().key (key ).build ()));
75
+
76
+ DeleteObjectsRequest deleteRequest = DeleteObjectsRequest .builder ()
77
+ .bucket (bucketName .getShipmentPictureBucket ())
78
+ .delete (builder -> builder .objects (keysToDelete ).build ())
79
+ .build ();
80
+
81
+ try {
82
+ DeleteObjectsResponse response = s3 .deleteObjects (deleteRequest );
83
+ List <S3Error > errors = response .errors ();
84
+ if (!errors .isEmpty ()) {
85
+ LOGGER .error ("Errors occurred while deleting objects:" );
86
+ errors .forEach (error -> System .out .println ("Object: " + error .key () +
87
+ ", Error Code: " + error .code () +
88
+ ", Error Message: " + error .message ()));
89
+ } else {
90
+ LOGGER .info ("Objects deleted successfully." );
91
+ }
92
+ } catch (SdkException e ) {
93
+ LOGGER .error ("Error occurred during object deletion: " + e .getMessage ());
94
+ }
95
+ }
96
+
57
97
}
0 commit comments