Java ile AWS S3 Dosya yükleme
Bu yazıda Amazon S3’e nasıl dosya yükleyebiliriz bunu inceleyeceğiz.
AWS S3 ile ilgili detay bilgiye buradan ulaşabilirsiniz.
Öncelikle aşağıdaki adımları yapmamız gerekiyor.
- AWS S3 içerisinden yeni bir Bucket oluşturuyoruz.
- IAM(Identity and Access Management) üzerinden yeni bir kullanıcı oluşturun.
- Oluşturduğunuz kullanıcı için Access Key oluşturun.
- Oluşturduğunuz kullanıcıya AmazonS3FullAccess iznini verin. (Bu izni vermezseniz 403 hatası alacaksınız.)
Şimdi koda geçebiliriz.
Öncelikle AWS S3 için Amazon’un SDK’sını eklememiz gerekiyor.
1 2 3 4 5 |
implementation 'com.amazonaws:aws-java-sdk-s3:1.12.470' |
Controller
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
@RequiredArgsConstructor @RestController public class DocumentController { private final DocumentService imageService; @PostMapping public void saveImage(@RequestParam("file") MultipartFile file) { imageService.upload(file); } } |
Service
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 |
@RequiredArgsConstructor @Service public class AWSService { private final AmazonS3 amazonS3; private final AWSClientConfig awsClientConfig; public String upload(MultipartFile file) { File localFile = convertMultipartFileToFile(file); amazonS3.putObject(new PutObjectRequest(awsClientConfig.getBucketName(), file.getOriginalFilename(), localFile)); return file.getOriginalFilename(); } private File convertMultipartFileToFile(MultipartFile file) { File convertedFile = new File(file.getOriginalFilename()); try { Files.copy(file.getInputStream(), convertedFile.toPath(), StandardCopyOption.REPLACE_EXISTING); } catch (IOException e) { throw new RuntimeException(e); } return convertedFile; } } |
Configuration
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 |
@Configuration @Getter public class AWSClientConfig { @Value("${aws.accessKey}") private String accessKey; @Value("${aws.secretAccessKey}") private String secretAccessKey; @Value("${aws.bucketName}") private String bucketName; private final Region region = Region.EU_CENTRAL_1; //kendi region bilginiz ile değiştirilmeli @Bean public AmazonS3 amazonS3() { BasicAWSCredentials awsCredentials = new BasicAWSCredentials(accessKey, secretAccessKey); return AmazonS3ClientBuilder .standard() .withCredentials(new AWSStaticCredentialsProvider(awsCredentials)) .withRegion(region.toString()) .build(); } @Bean public TextractClient textractClient(){ return TextractClient.builder() .credentialsProvider(StaticCredentialsProvider.create(AwsBasicCredentials.create(accessKey, secretAccessKey))) .region(region) .build(); } } |
Faydalı olması dileğiyle.