· 6 years ago · Jun 27, 2019, 11:24 AM
1config, controller, model, repository, service, application.java
2
3import com.amazonaws.auth.AWSCredentials;
4import com.amazonaws.auth.AWSStaticCredentialsProvider;
5import com.amazonaws.auth.BasicAWSCredentials;
6import com.amazonaws.services.s3.AmazonS3;
7import com.amazonaws.services.s3.AmazonS3ClientBuilder;
8import org.springframework.beans.factory.annotation.Value;
9import org.springframework.context.annotation.Bean;
10import org.springframework.context.annotation.Configuration;
11
12@Configuration
13public class AWSConfiguration {
14
15@Value("${cloud.aws.credentials.accessKey}")
16private String accessKey;
17
18@Value("${cloud.aws.credentials.secretKey}")
19private String secretKey;
20
21@Value("${cloud.aws.region}")
22private String region;
23
24@Bean
25public BasicAWSCredentials basicAWSCredentials() {
26 return new BasicAWSCredentials(accessKey, secretKey);
27}
28
29@Bean
30public AmazonS3 amazonS3Client(AWSCredentials awsCredentials) {
31 AmazonS3ClientBuilder builder = AmazonS3ClientBuilder.standard();
32 builder.withCredentials(new AWSStaticCredentialsProvider(awsCredentials));
33 builder.setRegion(region);
34 AmazonS3 amazonS3 = builder.build();
35 return amazonS3;
36}
37
38import com.amazonaws.services.s3.AmazonS3;
39
40
41 import com.amazonaws.services.s3.model.*;
42 import org.apache.commons.io.IOUtils;
43 import org.springframework.beans.factory.annotation.Autowired;
44 import org.springframework.beans.factory.annotation.Value;
45 import org.springframework.http.HttpHeaders;
46 import org.springframework.http.HttpStatus;
47 import org.springframework.http.MediaType;
48 import org.springframework.http.ResponseEntity;
49 import org.springframework.stereotype.Service;
50 import org.springframework.util.StringUtils;
51 import org.springframework.web.multipart.MultipartFile;
52
53 import java.io.FileInputStream;
54 import java.io.FileNotFoundException;
55 import java.io.IOException;
56 import java.io.InputStream;
57 import java.net.URLEncoder;
58 import java.util.ArrayList;
59 import java.util.Arrays;
60 import java.util.List;
61
62 @Service
63 public class S3Service {
64
65 @Autowired
66 private AmazonS3 amazonS3;
67
68 @Value("${cloud.aws.s3.bucket}")
69 private String bucket;
70
71 private PutObjectResult upload(String filePath, String uploadKey)
72 throws FileNotFoundException {
73 return upload(new FileInputStream(filePath), uploadKey);
74}
75
76private PutObjectResult upload(InputStream inputStream, String uploadKey) {
77 PutObjectRequest putObjectRequest = new PutObjectRequest(bucket, uploadKey, inputStream, new ObjectMetadata());
78
79 putObjectRequest.setCannedAcl(CannedAccessControlList.PublicRead);
80
81 PutObjectResult putObjectResult = amazonS3.putObject(putObjectRequest);
82
83 IOUtils.closeQuietly(inputStream);
84
85 return putObjectResult;
86}
87
88public List<PutObjectResult> upload(MultipartFile[] multipartFiles) {
89 List<PutObjectResult> putObjectResults = new ArrayList<>();
90
91 Arrays.stream(multipartFiles)
92 .filter(multipartFile -> !StringUtils.isEmpty(multipartFile.getOriginalFilename()))
93 .forEach(multipartFile -> {
94 try {
95 putObjectResults.add(upload(multipartFile.getInputStream(), multipartFile.getOriginalFilename()));
96 } catch (IOException e) {
97 e.printStackTrace();
98 }
99 });
100
101 return putObjectResults;
102}
103
104public ResponseEntity<byte[]> download(String key) throws IOException {
105 GetObjectRequest getObjectRequest = new GetObjectRequest(bucket, key);
106
107 S3Object s3Object = amazonS3.getObject(getObjectRequest);
108
109 S3ObjectInputStream objectInputStream = s3Object.getObjectContent();
110
111 byte[] bytes = IOUtils.toByteArray(objectInputStream);
112
113 String fileName = URLEncoder.encode(key, "UTF-8").replaceAll("\+", "%20");
114
115 HttpHeaders httpHeaders = new HttpHeaders();
116 httpHeaders.setContentType(MediaType.APPLICATION_OCTET_STREAM);
117 httpHeaders.setContentLength(bytes.length);
118 httpHeaders.setContentDispositionFormData("attachment", fileName);
119
120 return new ResponseEntity<>(bytes, httpHeaders, HttpStatus.OK);
121}
122
123public List<S3ObjectSummary> list() {
124 ObjectListing objectListing = amazonS3.listObjects(new ListObjectsRequest().withBucketName(bucket));
125
126 List<S3ObjectSummary> s3ObjectSummaries = objectListing.getObjectSummaries();
127
128 return s3ObjectSummaries;
129 }
130}
131
132org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.cloud.aws.context.support.io.ResourceLoaderBeanPostProcessor#0': Cannot resolve reference to bean 'amazonS3' while setting constructor argument;"