Spring boot - 파일 업로드 2

목차

Spring boot 파일 업로드 2

  • getHeaderNames()
    • part Type으로 전달된 데이터의 모든 해더 이름을 가져온다.
  • getHeader(headerName)
    • getHeader메소드에 헤더 이름을 넘겨주면 해더 이름이 갖는 요청의 모든 해더 정보를 가져온다.
  • getSubmittedFileName()
    • 파일 명을 가져오기 위한 메소드
  • getInputStream()
    • Part에 저장된 데이터를 가져오기 위한 메소드
  • write(filepath)
    • write 메소드에 파일이 저장될 File Path를 입력하면 해당 경로에 파일이 저장하는 메소드
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));
}
//편의 메서드
//content-disposition; filename
log.info("submittedFilename={}", part.getSubmittedFileName());
log.info("size={}", part.getSize()); //part body size

//데이터 읽기
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();
log.info("파일 저장 fullPath={}", fullPath);
part.write(fullPath);
}
}
@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 saveFileV1(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));
}
//편의 메서드
//content-disposition; filename
log.info("submittedFilename={}", part.getSubmittedFileName());
log.info("size={}", part.getSize()); //part body size

//데이터 읽기
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();
log.info("파일 저장 fullPath={}", fullPath);
part.write(fullPath);
}
}

return "upload-form";
}
}
Share