우리는 웹을 브라우징할 때 http프로토콜(요청-응답하는 통신규약)을 사용한다.
단순 1차 적인 웹 브라우징이 아니라 유투브 라이브도 볼 수 있을 정도로 http는 인터넷 세계에서는 없어서는 안되는 통신규약이다.
하지만 , 만약 한번의 요청(request)이 여러개의 데이터 타입을 보여달라고 하면 어떨까? 예를 들어 꽃 이름과 사진을 다 보여달라고 하는 경우 말이다.
이러한 경우에 사용하는 것이 multipart이다. 단어 뜻대로 multi( 다양한..) part(부분들...)
1.Multipart은 여러개의 데이터 타입을 한번에 보낼 때 사용한다.
게시글에 날짜,글 처럼 글로만 되어있는 것이 모여있을 때는 text로만 되어있기 때문에 같은 데이터 타입이다. 이러한 경우는 key=value로 타입이 같은 형태로 인코딩한다. 그러나 텍스트가 아닌 사진같은 것이 들어오면 , 사진은 이진파일(binary data: 컴퓨터 파일)이라서 인코딩이 어렵다. 이러한 경우 multipart/form-data 타입을 사용한다.
예를 들어 이메일 전송시 , 강아지 사진과 함께 설명이 들어있다면 사진이라는 이진파일과 글이 들어있어서 서로 데이터 타입이 다르다. 이때 multipart/form-date를 이용해주면 동시에 보낼 수 있다. multipart은 http 프로토콜의 바디 부분에 데이터를 여러 부분으로 나눠서 보내는 것을 말한다.
2.스프링부트에서 제공하는 파일업로드 기능이 있는 인터페이스이다.
다중 파트 요청에서 받은 업로드된 파일의 표현이며, 파일 내용은 메모리에 저장되거나 일시적으로 디스크에 저장된다.
public interface MultipartFile
extends InputStreamSource
게시판을 만들 때, 사진 업로드를 위해 MultipartFile을 사용한 적이 있다. 이 때 응답 Response부분에는 만들지 않고 , Request 부분에만 만들어 놓았다. 이는 , 처음 사진 파일을 저장받을 때 MultipartFile 타입으로 저장해야 스프링에 등록되기 때문이며, 등록 후 사진을 보여줄 때는 스프링에서 처리가 된 후 storedFileName으로 보여주기 때문에 따로 필요가 없다.
//request 만들기 할 때 쓸 객체
public static class Request {
private String title;
private String content;
private String writer;
@Setter
private String originFileName;
@Setter
private String storedFileName;
//파일 객체
private MultipartFile file;
}
Service부분에서 파일 받는 부분 처리해 줄 때 사용하였다,
public int updateBoard(Map<String,Object> param,BoardVO.Request request) throws Exception{
BoardVO.Response vo = mapper.getBoard(param); //기존 값을 수정해야하기 때문에 가져온다.
//파일 객체 넘어온 것을 가져오고..
MultipartFile file = request.getFile();
if(!file.isEmpty()){
//새로 넘어온 파일이 있고, 기존에 파일이 존재하면 지운다.
if(vo.getStoredFileName() !=null) {
String fullPath = filePath + vo.getStoredFileName();
File f = new File(fullPath);
//현재 경로에 파일이 있다면 지워라
if (f.exists()) {
f.delete();
}
}
//새로운 파일 등록
uploadFile(request);
}e
이때도 , 파일 객체를 처음 받을 때 MultipartFile file = request.getFile()로 파일을 받아온다 MultipartFile 타입의 file이라는 객체는 BoardVO 의 request가 받은 file()이다.
https://codingnotes.tistory.com/73
Multipart란?
1. Multipart란? 웹 클라이언트가 요청을 보낼 때, http 프로토콜의 바디 부분에 데이터를 여러 부분으로 나눠서 보내는 것. 웹 클라이언트가 서버에게 파일을 업로드할 때, http 프로토콜의 바디 부분
codingnotes.tistory.com
https://pspdfkit.com/blog/2021/a-brief-tour-of-multipart-requests/
'Spring > [Spring]Spring 정리' 카테고리의 다른 글
@RequestParam 파라메터 매핑 (0) | 2022.01.27 |
---|---|
Http 기본개념 (response , request) (1) | 2022.01.12 |
@bean이랑 @component 차이 (0) | 2022.01.08 |
댓글