1. application/x-www-form-urlencoded
2. multipart/form-data
: multipart/form-data 전송 방식에서 각각 나누어진 부분을 받아서 확인
참고 옵션들
HTTP 요청 메시지 확인
logging.level.org.apache.coyote.http11=debug
업로드 사이즈 제한
spring.servlet.multipart.max-file-size=1MB
spring.servlet.multipart.max-request-size=10MB
max-file-size : 파일 하나의 최대 사이즈, 기본 1MB
max-request-size : 멀티파트 요청 하나에 여러 파일을 업로드 할 수 있는데, 그 전체 합
멀티파트 처리
spring.servlet.multipart.enabled=false
파일 업로드 경로 설정
//application.properties
file.dir=C: /Users/study/file/
/ 포함 주의@Value("${file.dir}")
private String fileDir;
part.getSubmittedFileName() : 클라이언트가 전달한 파일명
part.getInputStream() : Part의 전송 데이터 읽기
part.write() : Part를 통해 전송된 데이터 저장
서블릿이 제공하는 Part는 편하기는 하지만
HttpServletRequest 를 사용해야 하고 추가로 파일 부분만 구분하려면 여러가지 코드가 필요하다
MultipartFile 인터페이스로 멀티파트 파일을 편리하게 지원
@PostMapping("/upload")
public String saveFile(@RequestParam String itemName,
@RequestParam MultipartFile file) throws IOException {
}
@RequestParam MultipartFile file
file.getOriginalFilename() : 업로드 파일 명
file.transferTo() : 파일 저장
@Data
public class Item {
private Long id;
private String itemName;
private UploadFile attachFile; //첨부파일
private List<UploadFile> imageFiles;
}
public class UploadFile {
private String uploadFileName; //고객이 업로드한 파일명
private String storeFileName; //서버 내부에서 관리하는 파일명
}
파일 다운로드
@GetMapping("/attach/{itemId}")
public ResponseEntity<Resource> downloadAttach(@PathVariable Long itemId) throws MalformedURLException {
Item item = itemRepository.findById(itemId);
String storeFileName = item.getAttachFile().getStoreFileName();
String uploadFileName = item.getAttachFile().getUploadFileName();
//"file:/Users/../b3ab2107-0ae7-4355-a958-089cb2b3d9a1.gif"
UrlResource resource = new UrlResource("file:" + fileStore.getFullPath(storeFileName));
//인코딩
String encodedUploadFileName = UriUtils.encode(uploadFileName, StandardCharsets.UTF_8);
String contentDisposition = "attachment; filename=\"" + encodedUploadFileName + "\"";
return ResponseEntity.ok()
.header(HttpHeaders.CONTENT_DISPOSITION, contentDisposition)
.body(resource);
}
attachment; filename="업로드 파일명" 값 설정