@RestController
@RequestMapping("/api/users")
public class userController {
@PostMapping("/fileupload")
public ResponseEntity<Map<String,String>> upload(@RequestParam("file") MultipartFile multipart,@RequestParam Map<String,Object> userMap){
String fileName = multipart.getOriginalFilename();
String message = "";
try {
message = S3Util.uploadFile(fileName,multipart.getInputStream());
} catch (Exception ex){
message = "Error uploading file" + ex.getMessage();
}
String firstName = (String) userMap.get("firstName");
Map<String, String> map = new HashMap<>();
map.put("firstName", firstName);
map.put("message", message);
return new ResponseEntity<>(map, HttpStatus.OK);
}
}
Multipart란?
MultipartFile 이란?
사용자가 업로드한 File을 핸들러에서 손쉽게 다룰 수 있게 도와주는 매개변수 중 하나입니다.

출처
https://antstudy.tistory.com/308
public class S3Util {
public static final String BUCKET = "bucketname";
public static String uploadFile(String fileName, InputStream inputStream)
throws S3Exception, AwsServiceException, SdkClientException, IOException {
AwsBasicCredentials credentials = AwsBasicCredentials.create("awsAccessKey","awsSecretAcessKey");
S3Client client = S3Client.builder()
.region(Region.AP_NORTHEAST_2)
.credentialsProvider(StaticCredentialsProvider.create(credentials))
.build();
PutObjectRequest request = PutObjectRequest.builder()
.bucket(BUCKET)
.key(fileName)
.build();
client.putObject(request,
RequestBody.fromInputStream(inputStream,inputStream.available()));
System.out.println("File uploaded successfully to S3");
S3Presigner presigner = S3Presigner.create();
GetObjectRequest objectRequest = GetObjectRequest.builder()
.bucket(BUCKET)
.key(fileName)
.build();
GetObjectPresignRequest presignRequest = GetObjectPresignRequest.builder()
.signatureDuration(Duration.ofHours(1)) // The URL will expire in 10 minutes
.getObjectRequest(objectRequest)
.build();
PresignedGetObjectRequest presignedRequest = presigner.presignGetObject(presignRequest);
return presignedRequest.url().toExternalForm();
}
}
@Bean
public FilterRegistrationBean<CorsFilter> corsFilter() {
FilterRegistrationBean<CorsFilter> registrationBean = new FilterRegistrationBean<>();
CorsConfiguration config = new CorsConfiguration();
config.addAllowedOrigin("*");
config.addAllowedHeader("*");
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", config);
registrationBean.setFilter(new CorsFilter(source)); // CorsConfiguration을 직접 전달합니다
registrationBean.setOrder(1);
return registrationBean;
}