@PostMapping("/add")
public String add(@RequestParam("image") MultipartFile image, @RequestParam("name") String name) {
System.out.println(image);
System.out.println(name);
return "add-page";
}
이게 제 컨트롤러 코드고 requestMapping 같은거 설정 안해둬서 /add 경로가 맞긴 하거든요
function submitAuthor() {
const name = document.querySelector('input[name="name"]').value;
const image = document.querySelector('input[type="file"]').files[0];
const formData = new FormData();
formData.append('name', name);
formData.append('image', image);
fetch('/add', {
method: 'POST',
body: formData
})
.then(response => {
console.log(response)
})
.catch(error => {
console.error('Error', error);
});
}
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous">
<script defer src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz" crossorigin="anonymous"></script>
<title>Document</title>
<script type="text/javascript" th:inline="javascript">
function submit() {
const name = document.querySelector('input[name="name"]').value;
const image = document.querySelector('input[type="file"]').files[0];
const formData = new FormData();
formData.append('name', name);
formData.append('image', image);
fetch('/add', {
method: 'POST',
body: formData
})
.then(response => {
console.log(response)
})
.catch(error => {
console.error('Error adding a:', error);
});
}
</script>
</head>
<body>
<div class="container">
<h1>추가하기</h1>
<div th:class="mt-5">
<input type="file" name="image" accept="image/png, image/jpeg" class="form-control mt-2">
<input name="name" class="form-control me-2" type="search" placeholder="입력" aria-label="Search">
<button class="btn btn-outline-success" type="submit" onclick="submit()">
추가하기
</button>
</div>
</div>
</body>
</html>
이게 자바스크립트 코드고 여기서 formData로 데이터 전송하는데
PostMan 으로 formData를 같은 경로로 보내면 문제 없이 컨트롤러에 도착하는데
자바스크립트 fetch를 사용하면 자꾸 404 not found 에러가 떠요
왜 이런걸까요 ㅠㅠ
cors나 csrf 설정은 문제 없습니다 ㅠㅠ
헤더에 콘텐트 타입 폼 데이터 설정해보셈
폼 데이터는 헤더를 설정할 필요가 없다고 해서 이미지 전송이 안되고 있습니다 ㅠㅠ
fetch에다 풀 경로 다 적어보셈
해도 똑같이 404 뜹니다 ㅠ
디버깅모드해도 컨트롤러까진 감?
아뇨 컨트롤러 쪽에 진입도 못합니다
HTML FORM도 보여줭
수정해서 다시 업로드 했습니다 살려주십쇼..
버튼 타입을 button으로 두고 함수명도 submitInput 처럼 다른걸루 바꿔보세옹
바꿔봐도 404만 뜨네요 fetch 함수를 잘못 쓴거 같긴 한데 어디가 문제일까요 ㅠㅠ