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 |