study

(230623) [Postman] MultipartFile

hjkeeeem 2024. 9. 3. 01:46

File

기존에 static 안에 있던 폴더들을 postman에서 조회할 때 http://localhost:8080/~ 으로 설정해도 결과가 나왔지만

위 사진과 같이 설정 시 url에 static을 붙여야 데이터 조회가 된다. http://localhost:8080/static/~

 

HTMl에서 JS없이 데이터를 보낼 때는? => form 사용

- 내부에 input 요소를 이용해 전달할 데이터 정의

- input type="submit"을 이용해 form 요소 내부의 데이터 수합

- enctype 속성으로 데이터 인코딩 방식 정의 가능

 

 

multipart/form-data

요청을 여러 부분으로 구분해서 전송하는 형태 ( JSON 혹은 multipart가 있다. )

- 텍스트와 파일이 혼합된 요청이라는 의미

- Form을 이용해 파일을 보낼 경우 선택해야하는 방식

<form enctype="multipart/form-data">
	<input type ="text" name="name">
	<input type="file" name="photo">
	<input type="submit">
</form>

file 설정이 가능

@RequestParam : HTML 파일 중 input에 담긴 데이터를 인자로 할당하는 역할 ( name="name" )

 

@Controller
public class FileController {
    @RequestMapping("/multipart")
    public void multipart(@RequestParam("name") String name,
                          @RequestParam("photo") MultipartFile multipartFile
    ) {
        
    }
}

file 타입의 데이터를 인자로 할당받고 싶다면 똑같이 @RequestParam으로 input 안에 name을 적어준다.

반환형은 MultipartFile 

 

 

Postman에서 파일 Intellij로 전달하기

@Slf4j
@RestController
public class FileController {
    @PostMapping(value = "/multipart", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    public ResponseDto multipart(@RequestParam("name") String name,
                                 @RequestParam("photo") MultipartFile multipartFile
    ) throws IOException {
        Path uploadTo = Path.of("filename.png");
        multipartFile.transferTo(uploadTo);

        ResponseDto response = new ResponseDto();
        response.setMessage("success");
        return response;
    }
}

 

Intellij 에서 경로 지정 및 파일 다운로드 하기

@Slf4j
@RestController
public class FileController {
    @PostMapping(value = "/multipart", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    public ResponseDto multipart(@RequestParam("name") String name,
                                 @RequestParam("photo") MultipartFile multipartFile
    ) throws IOException {
        // 저장할 경로를 생성한다.
        Files.createDirectories(Path.of("media"));
        // 저장할 파일이름을 포함한 경로를 작성한다.
        Path uploadTo = Path.of("media/filename.png");
        // 저장한다. => postman에서 실행 후 intellij 파일 경로에 media라는 폴더가 생김
        multipartFile.transferTo(uploadTo);

        ResponseDto response = new ResponseDto();
        response.setMessage("success");
        return response;
    }
}

 

 

저장 시간을 파일명으로 지정하여 사용

@Slf4j
@RestController
public class FileController {
    @PostMapping(value = "/multipart", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    public ResponseDto multipart(@RequestParam("name") String name,
                                 @RequestParam("photo") MultipartFile multipartFile
    ) throws IOException {
        // 저장할 경로를 생성한다.
        Files.createDirectories(Path.of("media"));
        // 저장할 파일이름을 포함한 경로를 작성한다.
        LocalDateTime now = LocalDateTime.now();
        log.info(now.toString());
        Path uploadTo = Path.of(String.format("media/%s.png",now));
        // 저장한다. => postman에서 실행 후 intellij 파일 경로에 media라는 폴더가 생김
        multipartFile.transferTo(uploadTo);


        ResponseDto response = new ResponseDto();
        response.setMessage("success");
        return response;
    }
}

 

 

 

전송 완료 메세지에 경로와 시간을 표기하는 방법

ResponseDto response = new ResponseDto();
response.setMessage(String.format("/static/%s.png",now));
return response;

 

'study' 카테고리의 다른 글

(230627) AOP  (0) 2024.09.03
(230626) Validation  (0) 2024.09.03
(230614) JPA  (0) 2024.09.03
(230613) Stack, DFS / MyBatis 설정  (0) 2024.09.03
(230612) 알고리즘 - Stack / DB - IntelliJ로 SQLite 연결 / DML / DDL / Call Stack  (0) 2024.09.03