-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathImageUploadServiceImpl.java
More file actions
91 lines (72 loc) · 2.97 KB
/
ImageUploadServiceImpl.java
File metadata and controls
91 lines (72 loc) · 2.97 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
package com.gaethering.modulemember.service;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.model.CannedAccessControlList;
import com.amazonaws.services.s3.model.ObjectMetadata;
import com.amazonaws.services.s3.model.PutObjectRequest;
import com.gaethering.modulemember.exception.pet.FailedUploadImageException;
import com.gaethering.modulemember.exception.pet.ImageNotFoundException;
import com.gaethering.modulemember.exception.pet.InvalidImageTypeException;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.multipart.MultipartFile;
import java.io.IOException;
import java.util.ArrayList;
import java.util.UUID;
@Service
@RequiredArgsConstructor
@Transactional
public class ImageUploadServiceImpl implements ImageUploadService {
private final AmazonS3 amazonS3;
@Value("${cloud.aws.s3.bucket}")
private String bucket;
@Value("${dir}")
private String dir;
@Override
public String uploadImage(MultipartFile multipartFile) {
String fileName = createFileName(multipartFile.getOriginalFilename());
ObjectMetadata objectMetadata = new ObjectMetadata();
objectMetadata.setContentLength(multipartFile.getSize());
objectMetadata.setContentType(multipartFile.getContentType());
try {
amazonS3.putObject(new PutObjectRequest(bucket + "/" + dir, fileName, multipartFile.getInputStream(), objectMetadata)
.withCannedAcl(CannedAccessControlList.PublicRead));
} catch(IOException e) {
throw new FailedUploadImageException();
}
return amazonS3.getUrl(bucket, dir + "/" + fileName).toString();
}
@Override
public void removeImage(String filename) {
amazonS3.deleteObject(bucket,
dir + "/" + filename.substring( filename.lastIndexOf("/") + 1));
}
@Override
public String createFileName(String filename) {
return UUID.randomUUID().toString().concat(getFileExtension(filename));
}
@Override
public String getFileExtension(String filename) {
if (filename.length() == 0) {
throw new ImageNotFoundException();
}
validateFileExtension(filename);
return filename.substring(filename.lastIndexOf("."));
}
@Override
public void validateFileExtension(String filename) {
ArrayList<String> fileValidate = new ArrayList<>();
fileValidate.add(".jpg");
fileValidate.add(".jpeg");
fileValidate.add(".png");
fileValidate.add(".JPG");
fileValidate.add(".JPEG");
fileValidate.add(".PNG");
String idxFileName = filename.substring(filename.lastIndexOf("."));
if (!fileValidate.contains(idxFileName)) {
throw new InvalidImageTypeException();
}
}
}