[Java] AWS S3에 파일 업로드

김뚝딱·2024년 7월 11일

Java

목록 보기
2/2
  1. 내 프로젝트는 Maven 이라서 aws s3 라이브러리를 추가해준다.

https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-aws
여기서

이 중에 암거나 눌러서

저거를 가져와서
내 프로젝트 Maven 에 넣는다.

  1. 내 프로젝트는 application.properties 를 쓰기 때문에 여기다가 설정값을 추가한다.
cloud.aws.credentials.accessKey=your-access-key
cloud.aws.credentials.secretKey=your-secret-key
cloud.aws.region.static=your-region
cloud.aws.s3.bucket=your-bucket-name

이렇게 추가 함.
여기서 cloud.aws.region.static=ap-northeast-2 이거는
AWS 데이터 센터의 물리적 위치를 뜻함.
ap-northeast-2 는 서울임.

  1. Config 파일 생성하기
@Configuration
public class S3Config {

    @Value("${cloud.aws.credentials.access-key}")
    private String accessKey;

    @Value("${cloud.aws.credentials.secret-key}")
    private String secretKey;

    @Value("${cloud.aws.region.static}")
    private String region;

    @Bean
    public AmazonS3Client amazonS3Client() {
        BasicAWSCredentials credentials = new BasicAWSCredentials(accessKey, secretKey);

        return (AmazonS3Client) AmazonS3ClientBuilder
                .standard()
                .withRegion(region)
                .withCredentials(new AWSStaticCredentialsProvider(credentials))
                .build();
    }
}
  1. 업로드 구현하기
@Service
@RequiredArgsConstructor
public class S3UploadService {

    private final AmazonS3 amazonS3;

    @Value("${cloud.aws.s3.bucket}")
    private String bucket;

    public String saveFile(MultipartFile multipartFile) throws IOException {
        String originalFilename = multipartFile.getOriginalFilename();

        ObjectMetadata metadata = new ObjectMetadata();
        metadata.setContentLength(multipartFile.getSize());
        metadata.setContentType(multipartFile.getContentType());

        amazonS3.putObject(bucket, originalFilename, multipartFile.getInputStream(), metadata);
        return amazonS3.getUrl(bucket, originalFilename).toString();
    }
}

putObject() 메소드가 파일을 저장해주는 메소드
getURl()을 통해 파일이 저장된 URL을 return 해주고, 이 URL로 이동 시 해당 파일이 오픈됨 (버킷 정책 변경을 하지 않았으면 파일은 업로드 되지만 해당 URL로 이동 시 accessDenied 됨)

참고 문서 : https://chb2005.tistory.com/200

profile
뚝딱뚝딱 만들어 봅시다 !

0개의 댓글