728x90
IAM 사용자 생성
사용자 이름을 입력하고 다음으로 넘어갑니다.
검토 후 사용자를 생성합니다.
생성된 사용자에 들어가서 보안 자격 증명의 액세스키를 생성합니다.
체크박스에 체크 후 다음 버튼을 클릭합니다.
태그 설명을 작성한 후 엑세스 키를 생성합니다.
액세스 키와 비밀키를 저장합니다. 이후로 확인이 어려우니 csv 파일을 다운로드하여 보관합니다.
스프링
build.gradle 설정
implementation 'org.springframework.cloud:spring-cloud-starter-aws:2.2.6.RELEASE'
Application.yml 설정
# multipart 설정
spring.servlet.multipart.max-file-size: 10MB
spring.servlet.multipart.max-request-size: 10MB
# aws 설정
# 사용할 S3 bucket region 입력
cloud:
aws:
region:
static: ap-northeast-2
stack:
auto: false
s3:
bucket: #aws s3 버킷 이름을 작성합니다.
iamAccessKey: # S3 Access Key
iamSecretKey: # S3 Secret Key
iamAccessKey, iamSecretKey는 보안을 위해 환경변수로 사용하거나, 별도의 yml 파일을 생성하여 공유되지 않도록 합니다.
AWSConfig
@Configuration
public class AWSConfig {
@Value("${iamAccessKey}")
private String iamAccessKey; // IAM Access Key
@Value("${iamSecretKey}")
private String iamSecretKey; // IAM Secret Key
private String region = "ap-northeast-2"; // Bucket Region
@Bean
public AmazonS3Client amazonS3Client() {
BasicAWSCredentials basicAWSCredentials = new BasicAWSCredentials(iamAccessKey, iamSecretKey);
return (AmazonS3Client) AmazonS3ClientBuilder.standard()
.withRegion(region)
.withCredentials(new AWSStaticCredentialsProvider(basicAWSCredentials))
.build();
}
}
FileUploadController
@RestController
@RequestMapping("/upload")
@RequiredArgsConstructor
public class FileUploadRestController {
private final S3FileUploadService s3FileUploadService;
@PostMapping
public Response<String> uploadFile(@RequestPart("file") MultipartFile file) throws IOException {
String url = s3FileUploadService.uploadFile(file);
return Response.success(url);
}
}
S3FileUploadService
@RequiredArgsConstructor
@Service
public class S3FileUploadService {
private final AmazonS3 s3Client;
@Value("${cloud.aws.s3.bucket}")
private String bucketName;
private String defaultUrl = "https://s3.amazonaws.com/";
public String uploadFile(MultipartFile file) throws IOException {
String fileName = generateFileName(file);
try {
s3Client.putObject(bucketName, fileName, file.getInputStream(), getObjectMetadata(file));
return defaultUrl + fileName;
} catch (SdkClientException e) {
throw new IOException("Error uploading file to S3", e);
}
}
private ObjectMetadata getObjectMetadata(MultipartFile file) {
ObjectMetadata objectMetadata = new ObjectMetadata();
objectMetadata.setContentType(file.getContentType());
objectMetadata.setContentLength(file.getSize());
return objectMetadata;
}
private String generateFileName(MultipartFile file) {
return UUID.randomUUID().toString() + "-" + file.getOriginalFilename();
}
}
TEST
Talend
POSTMAN
반응형
'Server > Spring&Spring Boot' 카테고리의 다른 글
[Querydsl] Spring Boot 3.0 이상 Querydsl 세팅 gradle (2) | 2023.01.30 |
---|---|
[Spring] TomcatServletWebServerFactory Port 설정 (0) | 2023.01.28 |
[Spring] test code에 대한 회고 (0) | 2023.01.24 |
[Spring Boot] SpringBoot 3.0.x 이상에서 Swagger 사용 (0) | 2023.01.19 |
[Spring Boot] Spring Security 6.0 Configuration. (0) | 2023.01.17 |