Spring

스프링 파일 첨부 요청 처리

초코chip 2024. 2. 7. 16:49

배경

스프링 프로젝트를 진행하다보면 텍스트 데이터 뿐만 아니라 아래와 같이 파일도 같이 요청을 받는 경우가 발생한다.

따라서 컨트롤러 클래스에서 파일이 첨부된 API 요청을 받는 방법을 정리하였다.

 

 

 

사용법

컨트롤러에서 요청 받기

  • @<method>Mapping 애너테이션 속성 추가
    • consumes = {MediaType.APPLICATION_JSON_VALUE, MediaType.MULTIPART_FORM_DATA_VALUE}
  • @RequestPart 애터테이션 사용
    • value: 요청의 key값
    • required = false: 파일 첨뷰가 없는 경우가 있다면 추가
  • MultipartFile 객체 사용: 해당 객체를 통해 파일 정보 받기
    @PostMapping(
            value = "/product",
            consumes = {MediaType.APPLICATION_JSON_VALUE, MediaType.MULTIPART_FORM_DATA_VALUE})
    public ResponseEntity<Void> createProduct(
            @RequestPart(value = "productReq") ProductCreateRequest request,
            @RequestPart(value = "files") List<MultipartFile> files
    ){

        productService.createProduct(request, files);

        return ResponseEntity.ok()
                .build();
    }

 

파일 정보 추출 방법

MultipartFile 객체의 메서드를 활용하여 정보 추출

  • file.getOriginalFilename(): 파일 이름 추출
  • file.getSize(): 파일 크기 추출
  • file.getContentType(): 파일 타입 추출
  • file.getInputStream(): 파일 추출
    public String upload(MultipartFile file) {
        String imageUrl = "";
        String fileName = createFileName(file.getOriginalFilename());
        ObjectMetadata objectMetadata = new ObjectMetadata();
        objectMetadata.setContentLength(file.getSize());
        objectMetadata.setContentType(file.getContentType());

        try (InputStream inputStream = file.getInputStream()) {
            AmazonS3.putObject(new PutObjectRequest(bucket , fileName, inputStream, objectMetadata)
                    .withCannedAcl(CannedAccessControlList.PublicRead));
            imageUrl = AmazonS3.getUrl(bucket, fileName).toString();
        } catch (IOException e) {
            throw new IllegalArgumentException("failed to upload");
        }
        return imageUrl;
    }

 

 

 

 

참고자료

https://whyeskang.com/258

 

Postman을 이용한 File, Dto 동시 Post요청

보통 Controller에서 Dto를 받을 때는 @RequestBody를 주로 사용합니다. 그리고 File을 받을 때는 MultipartFile 객체를 사용하며, @RequestParam을 사용합니다. 하지만 File과 Dto를 같이 받기 위해서는 @RequestPart라

whyeskang.com

 

'Spring' 카테고리의 다른 글

사용자 정의 예외(Custom exception)  (0) 2024.03.25