인프런 커뮤니티 질문&답변

deoksam님의 프로필 이미지

작성한 질문수

스프링 MVC 2편 - 백엔드 웹 개발 활용 기술

정리

saveFile 질문

작성

·

80

0

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
여기에 질문 내용을 남겨주세요.

@PostMapping("/upload")
    public String saveFile(@RequestParam("itemName") String itemName, @RequestParam("file") MultipartFile file) throws IOException {

        if (!file.isEmpty()){
            String fullPath = fileDir + file.getOriginalFilename();
            log.info("파일저장 fullPath={}",fullPath);
            file.transferTo(new File(fullPath));
        }
        return "upload-form";
    }

SpringUploadController 에 있는 savFile 입니다.

@RequestParam String itemName 없어도 되는거죠 ?

@RequestParm MultipatrFile file은 현재 파일이 빈값인지 아닌지 확인해야하기때문에 필요한거같은데 itemName은 필요가없을거같아서요 view단에서 값을 넘겨야하는것도 없는거같구요 답변 부탁드립니다 ~

답변 1

0

안녕하세요. deoksam님, 공식 서포터즈 y2gcoder입니다.

먼저 강의 자료에 있는 코드와 살짝 다른 것 같습니다.

@Slf4j
@Controller
@RequestMapping("/spring")
public class SpringUploadController {

    @Value("${file.dir}")
    private String fileDir;

    @GetMapping("/upload")
    public String newFile() {
        return "upload-form";
    }

    @PostMapping("/upload")
    public String saveFile(@RequestParam String itemName,
                           @RequestParam MultipartFile file, HttpServletRequest request) throws IOException {

        log.info("request={}", request);
        log.info("itemName={}", itemName);
        log.info("multipartFile={}", file);

        if (!file.isEmpty()) {
            String fullPath = fileDir + file.getOriginalFilename();
            log.info("파일 저장 fullPath={}", fullPath);
            file.transferTo(new File(fullPath));
        }

        return "upload-form";
    }
}

upload-form.html 도 다른 것 같습니다 🙂

<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="utf-8">
</head>
<body>

<div class="container">

    <div class="py-5 text-center">
        <h2>상품 등록 폼</h2>
    </div>

    <h4 class="mb-3">상품 입력</h4>

    <form th:action method="post" enctype="multipart/form-data">
        <ul>
            <li>상품명 <input type="text" name="itemName"></li>
            <li>파일<input type="file" name="file" ></li>
        </ul>
        <input type="submit"/>
    </form>

</div> <!-- /container -->
</body>
</html>

강의 자료에서는 upload-form.html 에서 itemName에 값을 넣어 폼데이터로 POST 요청을 보내고 있고, 컨트롤러에서는 폼데이터와 파일 데이터를 함께 받을 수 있는 것을 로그와 함께 보여줄 수 있는 코드를 보실 수 있습니다 🙂

 

감사합니다.

deoksam님의 프로필 이미지

작성한 질문수

질문하기