얍얍얍
571
2021-10-28 18:41:02
2
94

스프링 고수님들 이미지 업로드가 안됩니다 ㅠㅠ


이미지 업로드를 구현해봤습니다. 


일단 흐름은

메인 페이지(이미지가 보이는 페이지) ->

이미지 선택 페이지 ->

redirect로 메인페이지 (이때 바뀐 이미지가 짜잔!!) 해야하는데 안바뀝니다. (정확히는 서버를 다시돌리면 그때가서 바뀌더라구요.... ) - 브라우저 캐시도 다 삭제해주고 새로고침도 해봤습니다.

이미지는 프로젝트 내부 static/img 폴더 안에다 넣어줬습니다.


코드는 이렇습니다.


package com.example.demo;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;

@Controller
public class RootController {

String uploadFolder = "/Users/jongho/Desktop/demo/src/main/resources/static/img";
FileModel fileModel;
RootController(){
fileModel = new FileModel();
}
@GetMapping("/")
public String index(Model model){
String getImgUrl = "/img/";
String name = getImgUrl + fileModel.getFileName();
System.out.print(name);
model.addAttribute("name",name);
return "index";
}

@RequestMapping(value="/img",method=RequestMethod.GET)
public String img(){
return "img";
}

@RequestMapping(value="/img",method=RequestMethod.POST)
public String imgPost(@RequestParam("file")MultipartFile[] mFile ){
try{
String item = mFile[0].getOriginalFilename();
fileModel.setFileName(item);
File saveFile = new File(uploadFolder,item); // 저장할 폴더 이름, 저장할 파일 이름
mFile[0].transferTo(saveFile);
} catch (Exception e){
System.out.println(e);
}

return "redirect:/";
}

}

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Spring Demo Project</title>
</head>
<body>
<h1 th:text="${name}"></h1>
<h1>Hello World</h1>
<a href="/img">img page</a>
<br>
<img th:src="${name}" />
</body>
</html>

위에 h1 태그 안에 name 안에 이미지 경로는 계속 바뀌는데


이미지는 안바뀌고 꼭 서버를 새로 돌려야 바뀌네요;;


왜 그럴까요?


이미지를 프로젝트 내부에 저장해줘서 그런가요?

0
  • 답변 2

  • ohamma
    76
    2021-10-28 22:23:00

    server.xml 이미지경로 라고 쳐보세요. 프로젝트 익스플로어에 보면 server라는 폴더에 server.xml에 경로를 저장해줘야 돼요

  • 얍얍얍
    571
    2021-10-29 09:36:15

    감사합니다 외부 절대 경로로 넣어줘야 하는군요 ㅎ

  • 로그인을 하시면 답변을 등록할 수 있습니다.