먼저, 파일을 업로드 하려면 실제 파일이 저장될 경로가 필요하다.
application.properties에 지정해주면 된다.
file.dir=G:/spring/files/
폴더의 맨 끝에 / 해야 한다.
그리고 아마 폴더 자동생성 아닐 듯
@Slf4j
@Controller
@RequestMapping("/servlet/v2")
public class ServletUploadControllerV2 {
@Value("${file.dir}")
private String fileDir;
@GetMapping("/upload")
public String newFile(){
return "upload-form";
}
@PostMapping("/upload")
public String saveFileV2(HttpServletRequest request) throws ServletException, IOException {
log.info("request={}",request);
String itemName = request.getParameter("itemName");
log.info("itemName={}", itemName);
Collection<Part> parts = request.getParts();
log.info("parts={}",parts);
for (Part part : parts) {
log.info("==== PART ====");
log.info("name = {}",part.getName());
Collection<String> headerNames = part.getHeaderNames();
for (String headerName : headerNames) {
log.info("header = {} : {}",headerName,part.getHeader(headerName));
}
log.info("submittedFilename = {}",part.getSubmittedFileName());
log.info("size = {}", part.getSize());
InputStream inputStream = part.getInputStream();
String body = StreamUtils.copyToString(inputStream, StandardCharsets.UTF_8);
log.info("body = {}", body);
if(StringUtils.hasText(part.getSubmittedFileName())){
String fullPath = fileDir + part.getSubmittedFileName();
part.write(fullPath);
}
}
return "upload-form";
}
}
application.properties에 있는 값을 저렇게
@Value(${키})
String 넣을변수이름
해서 가져올 수 있다.
저번에 말 했듯 각각 parts로 데이터들이 나뉘고, 그것은 헤더, 바디의 형식으로 되어 있다.
위는 그냥 각각의 정보들을 한번 찍어본 거고, 중요한 것은
if(StringUtils.hasText(part.getSubmittedFileName())){
String fullPath = fileDir + part.getSubmittedFileName();
part.write(fullPath);
}
이부분.
part.write(경로 + 파일이름)
이거 실제로 파일이 저장된다.
part.getSubmittedFileName()이 파일이름 가져오는 거.
'스프링 > 4. 스프링 MVC-2' 카테고리의 다른 글
87. 파일 업로드, 다운로드 구현 (0) | 2023.09.25 |
---|---|
86. 스프링의 파일 업로드 (0) | 2023.09.25 |
84. 파일 업로드 (0) | 2023.09.24 |
83. 스프링이 제공하는 기본 포맷터 (0) | 2023.09.24 |
82. 포맷터 웹 어플리케이션(스프링, 컨버전서비스)에 등록 (0) | 2023.09.24 |