· 5 years ago · Feb 24, 2020, 07:34 PM
1mport com.amazonaws.auth.AWSCredentials;
2import com.amazonaws.auth.BasicAWSCredentials;
3import com.amazonaws.services.s3.AmazonS3;
4import com.amazonaws.services.s3.AmazonS3Client;
5import com.amazonaws.services.s3.model.CannedAccessControlList;
6import com.amazonaws.services.s3.model.DeleteObjectRequest;
7import com.amazonaws.services.s3.model.PutObjectRequest;
8import org.springframework.beans.factory.annotation.Value;
9import org.springframework.stereotype.Service;
10import org.springframework.web.bind.annotation.PostMapping;
11import org.springframework.web.multipart.MultipartFile;
12
13import javax.annotation.PostConstruct;
14import java.io.File;
15import java.io.FileNotFoundException;
16import java.io.FileOutputStream;
17import java.io.IOException;
18import java.util.Date;
19
20@Service
21public class AmazonClient {
22
23 private AmazonS3 s3client;
24
25 @Value("${amazon.endpointUrl}")
26 private String endpointUrl;
27
28 @Value("${amazon.s3.default-bucket}")
29 private String bucketName;
30
31 @Value("${amazon.aws.access-key-id}")
32 private String accessKey;
33
34 @Value("${amazon.aws.access-key-secret}")
35 private String secretKey;
36
37 @PostConstruct
38 private void initializeAmazon() {
39 BasicAWSCredentials credentials = new BasicAWSCredentials(this.accessKey, this.secretKey);
40 this.s3client = new AmazonS3Client(credentials);
41 }
42
43 private File convertMultiPartToFile(MultipartFile file) throws IOException {
44 File convFile = new File(file.getOriginalFilename());
45 FileOutputStream fos = new FileOutputStream(convFile);
46 fos.write(file.getBytes());
47 fos.close();
48 return convFile;
49 }
50
51 private String generateFileName(MultipartFile multipartFile) {
52 return new Date().getTime() + "-" + multipartFile.getOriginalFilename().replace(" ", "_");
53 }
54
55 private void uploadFileTos3Bucket(String fileName, File file) {
56 System.out.println("name = " + fileName);
57 System.out.println("name file= " +file.getName());
58 s3client.putObject(new PutObjectRequest(bucketName, fileName, file)
59 .withCannedAcl(CannedAccessControlList.PublicRead));
60 }
61
62 public String uploadFile(MultipartFile multipartFile) {
63 String fileUrl = "";
64 try {
65 File file = convertMultiPartToFile(multipartFile);
66 String fileName = generateFileName(multipartFile);
67 fileUrl = endpointUrl + "/" + bucketName + "/" + fileName;
68 uploadFileTos3Bucket(fileName, file);
69 file.delete();
70 } catch (IOException e) {
71 e.printStackTrace();
72 }
73 return fileUrl;
74 }
75
76 public String deleteFileFromS3Bucket(String fileUrl) {
77 String fileName = fileUrl.substring(fileUrl.lastIndexOf("/") + 1);
78 s3client.deleteObject(new DeleteObjectRequest((bucketName + "/"), fileName));
79 return "Successfully deleted";
80 }
81}