겉바속촉

[spring] 게시판 만들기 upload 본문

IT일기(하반기)/SPRING

[spring] 게시판 만들기 upload

겉바속촉 2020. 7. 2. 17:50
728x90
반응형

지난 번에 이어서 해보도록 하겠습니다

2020/07/02 - [취업일기/SPRING] - [spring] Upload 프로젝트 생성 후 세팅해주기

 

[spring] Upload 프로젝트 생성 후 세팅해주기

Legacy Project로 프로젝트 하나 만들어주세요 SpringMybatisUpload spring.mvc.upload 요렇게 해주었습니다 그럼 다음과 같이 생성이 되겠쥬?! 그리고 패키지에 클래스 4개 생성해주세요:) 그리고 resources에..

2-juhyun-2.tistory.com

 


퀀텀 db가셔서 테이블 하나 생성해주세요

 

그리고 다시 자바로 오셔서

UploadDto.java 코드 작성

package spring.mvc.upload;

import java.sql.Timestamp;

import org.springframework.web.multipart.MultipartFile;

public class UploadDto {
	
	private String num;
	private String writer;
	private String photoname;
	private String content;
	private Timestamp writeday;
	private MultipartFile photo;
	
	
	public String getNum() {
		return num;
	}
	public void setNum(String num) {
		this.num = num;
	}
	public String getWriter() {
		return writer;
	}
	public void setWriter(String writer) {
		this.writer = writer;
	}
	public String getPhotoname() {
		return photoname;
	}
	public void setPhotoname(String photoname) {
		this.photoname = photoname;
	}
	public String getContent() {
		return content;
	}
	public void setContent(String content) {
		this.content = content;
	}
	public Timestamp getWriteday() {
		return writeday;
	}
	public void setWriteday(Timestamp writeday) {
		this.writeday = writeday;
	}
	public MultipartFile getPhoto() {
		return photo;
	}
	public void setPhoto(MultipartFile photo) {
		this.photo = photo;
	}

	
	
}

 

UploadDaoInter.java로 가서 하나만 우선 만들게요:)

package spring.mvc.upload;

public interface UploadDaoInter {
	
	public int getTotalCount();
	

}

 

 

UploadDao.java로 가서 extends, implements각각 해주신 후에

빨간 줄에 마우스 올리고 Add....클릭

package spring.mvc.upload;

import org.mybatis.spring.support.SqlSessionDaoSupport;
import org.springframework.stereotype.Repository;

@Repository
public class UploadDao extends SqlSessionDaoSupport implements UploadDaoInter{

	@Override
	public int getTotalCount() {
		// TODO Auto-generated method stub
		return getSqlSession().selectOne("selectCountOfUpload");
	}

}

 

 

UploadController.java

package spring.mvc.upload;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class UploadController {
	
	@Autowired
	UploadDaoInter dao;
	
	@GetMapping("/")
	public ModelAndView list()
	{
		ModelAndView model=new ModelAndView();
		int totalcount=dao.getTotalCount();
		model.addObject("totalcount",totalcount);
		model.setViewName("upload/uploadList");		
		return model;
		
	}

}

 

그리고 uploadList.jsp 만들어주세요

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"  %>
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
 <script src="https://code.jquery.com/jquery-3.5.1.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css">
<title>Insert title here</title>
</head>
<body>
<span class="alert alert-danger"><b>총 ${totalcount }개의 데이터가 있습니다</b></span>
</body>
</html>

 

실행시켜보면


 

uploadList.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"  %>
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
 <script src="https://code.jquery.com/jquery-3.5.1.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css">
<title>Insert title here</title>
</head>
<body>
<span class="alert alert-danger"><b>총 ${totalcount }개의 데이터가 있습니다</b></span>
<button type="button" class="btn btn-sm btn-info"
onclick="location.href='form'" style="margin-left: 400px">글쓰기</button>
</body>
</html>

 

이제 글쓰기를 누르면 form이 뜨게 해줄게요

 

uploadForm.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"  %>
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
 <script src="https://code.jquery.com/jquery-3.5.1.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css">
<title>Insert title here</title>
</head>
<body>
<form action="write" method="post" enctype="multipart/form-data"></form>
	<table class="table table-bordered" style="width: 400px;">
	<caption>글쓰기</caption>	
	<tr>
		<th>작성자</th>
		<td>
			<input type="text" name="writer" class="form-control input-sm" style="width: 100px;">
		</td>
	</tr>
	<tr>
		<th>사진</th>
		<td>
			<input type="file" name="photo" class="form-control input-sm" style="width: 300px;">
		</td>
	</tr>
	<tr>
		<td colspan="2">
			<textarea style="width: 400px; height: 150px;" class="form-control">
			</textarea>
		</td>
	</tr>
	<tr>
		<td>
			<button type="submit" class="btn btn-sm btn-danger">db에 저장</button>
		</td>
	</tr>
	</table>
</body>
</html>

 

UploadController.java 에다가 다음 코드 추가

	//글쓰기 누르면 폼이 보이게
	@GetMapping("/form")
	public String form()
	{
		return "upload/uploadForm";
	}

 

그리고 실행시켜볼게요

글쓰기 클릭 !!

그럼 다음과 같이 입력form이 뜬다면 성공 !^^!

 

UploadDaointer.java 에 다음 코드 추가

public List<UploadDto> getAllDatas();
public void insertUpload(UploadDto dto);

 

UploadSql.xml에 다음 코드 추가

<select id="selectAllOfUpload" resultType="udto">
		select * from imageguest order by num asc
</select>
<insert id="insertOfUpload" parameterType="udto">
		insert into imageguest values(seq_B.nextval,#{writer},#{photoname},#{content},sysdate)
</insert>

 

UploadDao.java로 가보시면 다음과 같이 빨간줄

마우스 올려서 add로 처리

다음과 같이 촤르르르륵 생깁니다

그러면 다음과 같이 작성해주세요

	@Override
	public List<UploadDto> getAllDatas() {
		// TODO Auto-generated method stub
		return getSqlSession().selectList("selectAllOfUpload");
	}

	@Override
	public void insertUpload(UploadDto dto) {
		// TODO Auto-generated method stub
		getSqlSession().insert("insertOfUpload",dto);
	}

 

이제는 UploadController.java로 가셔서 다음과 같이 추가

 

이제는 db저장을 누르면 list로 가야합니다:)

그렇기 때문에 controller로 가셔서 다음과 같이 추가 작성해주세요

package spring.mvc.upload;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class UploadController {

	@Autowired
	UploadDaoInter dao;
	
	@GetMapping("/") //시작페이지..인덱스 따로설정안하면 무조건/루트
	public ModelAndView list()
	{
		ModelAndView model=new ModelAndView();
		int totalcount=dao.getTotalCount();
		List<UploadDto>list=dao.getAllDatas();
		model.addObject("list",list );
		model.addObject("totalcount", totalcount);
		model.setViewName("upload/uploadList");
		return model;
	}
	
	//글쓰기누르면 폼이보이게
	@GetMapping("/form")
	public String form()
	{
		return "upload/uploadForm";
	}
	
	//내용을 입력후 db저장버튼 눌렀을때....파일입출력
	@PostMapping("/write")
	public String write(@ModelAttribute UploadDto dto,
			HttpServletRequest request)
	{
		//photo: 멀티파트:콘솔에 찍히게
		System.out.println("이미지명: "+dto.getPhoto().getOriginalFilename());
		//톰캣서버의 경로를 구해야 프로젝트 경로를 구할수있다
		//web-inf/save경로
		String path=request.getSession().getServletContext().getRealPath("/WEB-INF/save");
		
		System.out.println("path="+path);
		
		//이미지를 path에저장
		FileOutputStream fos=null;
		
		try {
			fos=new FileOutputStream(path+"\\"+dto.getPhoto().getOriginalFilename());
			
			byte []uploadData =dto.getPhoto().getBytes();
			fos.write(uploadData);
			
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			try {
				fos.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		}//dto다 들어오는데 이미지 이름 안들어옴
		//이미지 이름을 dto에 저장
		//db에 저장해야 나중에 가져옴
		dto.setPhotoname(dto.getPhoto().getOriginalFilename());
		
		//insert
		dao.insertUpload(dto);
		
		return "redirect:list";  //list컨트롤러
	}
	
	
}

 

uploadForm.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"  %>
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
 <script src="https://code.jquery.com/jquery-3.5.1.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css">
<title>Insert title here</title>
</head>
<body>
<form action="write" method="post" enctype="multipart/form-data">
	<table class="table table-bordered" style="width: 400px;">
	<caption>글쓰기</caption>	
	<tr>
		<th>작성자</th>
		<td>
			<input type="text" name="writer" class="form-control input-sm" style="width: 100px;">
		</td>
	</tr>
	<tr>
		<th>사진</th>
		<td>
			<input type="file" name="photo" class="form-control input-sm" style="width: 300px;">
		</td>
	</tr>
	<tr>
		<td colspan="2">
			<textarea style="width: 400px; height: 150px;" class="form-control" name="content">
			</textarea>
		</td>
	</tr>
	<tr>
		<td colspan="2" align="center">
			<button type="submit" class="btn btn-sm btn-danger">db에 저장</button>
		</td>
	</tr>
	</table>
	</form>
</body>
</html>

 

이제 db에 저장을 누르면 list로 가야합니다

 

이제는 list를 작성해주러 갈게요

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"  %>
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
 <script src="https://code.jquery.com/jquery-3.5.1.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css">
<title>Insert title here</title>
</head>
<body>
<span class="alert alert-danger"><b>총 ${totalcount }개의 데이터가 있습니다</b></span>
<button type="button" class="btn btn-sm btn-info"
onclick="location.href='form'" style="margin-left: 400px">글쓰기</button>

<hr>
<c:forEach var="dto" items="${list }" varStatus="i">
<table class="table table-bordered">
	<tr>	
	<td>
	작성자: ${dto.writer }<br>
	작성일: <fmt:formatDate value="${dto.writeday }" pattern="yyyy-MM-dd HH:mm"/>
	<hr>
	${dto.photoname }
	<img alt="" src="../save/${dto.photoname }" style="max-width: 300px">
	<pre>${dto.content }</pre>
	</td>
	</tr>
	
	<tr>
	<td align="right">
	<button type="button" class="btn btn-danger"
	onclick="location.href='delete?num=${dto.num}'">delete</button>
	<button type="button" class="btn btn-info"
	onclick="location.href='update?num=${dto.num}'">update</button>
	
	</td>
	</tr>
	
</table>
<br><br>

</c:forEach>
</body>
</html>

 

 

혹시 한글이 깨진는 경우 다음 코드를 넣어주세요:)

<!— encoding —>
    <filter>
      <filter-name>encodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
          <param-name>encoding</param-name>
          <param-value>UTF-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
      <filter-name>encodingFilter</filter-name>
      <url-pattern>/*</url-pattern>
    </filter-mapping>

 

 

이제 작성해준 list가 뜨는 지 확인해주러가 가볼게요:)

db에 저장을 눌러보시면

다음과 같이 list가 떠야합니다

 

그리고 콘솔창에 있는 경로를 복사한 후에

탐색기에 붙여넣기 해주세요:)

 

다음과 같이 사진들이 들어가 있는 지 확인해주시면 okay

 


이제는 수정, 삭제를 만들어보도록 할게요

 

UploadDaoInter.java

package spring.mvc.upload;

import java.util.List;

public interface UploadDaoInter {
	
	public int getTotalCount();
	public List<UploadDto> getAllDatas();
	public void insertUpload(UploadDto dto);
	public void deleteUpload(String num);
	public UploadDto getData(String num);
	public void updateUpload(UploadDto dto);
	

}

 

 

SqlMapConfig.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="upload">
	<select id="selectCountOfUpload" resultType="int">	
		select count(*) from imageguest		
	</select>
	<select id="selectAllOfUpload" resultType="udto">
	 select * from imageguest order by num desc
	</select>
	<insert id="insertOfUpload" parameterType="udto">
	 insert into imageguest values(seq_b.nextval,#{writer},#{photoname},#{content},sysdate)
	</insert>
	<delete id="deleteOfUpload" parameterType="udto">
	 delete from imageguest where num=#{num}
	</delete>
	<select id="selectOneOfUpload" parameterType="udto" resultType="udto">
	 select * from imageguest where num=#{num}
	</select>
	<update id="updateOfUpload" parameterType="udto">
	 update imageguest set writer={#writer}, photoname=#{photoname}. content={#content} where num=#{num}
	</update>
	
</mapper>

 

UploadDao로 가셔서 빨간 줄에 마우스 올리고 메서드들 추가

그럼 다음과 같이 촤르르르륵 뜹니다

 

그럼 다음과 같이 완성 해 주시면 okay

 

UploadDao.java

package spring.mvc.upload;

import java.util.List;

import org.mybatis.spring.support.SqlSessionDaoSupport;
import org.springframework.stereotype.Repository;

@Repository
public class UploadDao extends SqlSessionDaoSupport implements UploadDaoInter{

	@Override
	public int getTotalCount() {
		// TODO Auto-generated method stub
		return getSqlSession().selectOne("selectCountOfUpload");
	}

	@Override
	public List<UploadDto> getAllDatas() {
		// TODO Auto-generated method stub
		return getSqlSession().selectList("selectAllOfUpload");
	}

	@Override
	public void insertUpload(UploadDto dto) {
		// TODO Auto-generated method stub
		getSqlSession().insert("insertOfUpload",dto);
	}

	@Override
	public void deleteUpload(String num) {
		// TODO Auto-generated method stub
		getSqlSession().delete("deleteOfUpload",num);
	}

	@Override
	public UploadDto getData(String num) {
		// TODO Auto-generated method stub
		return getSqlSession().selectOne("selectOneOfUpload",num);
	}

	@Override
	public void updateUpload(UploadDto dto) {
		// TODO Auto-generated method stub
		getSqlSession().update("updateOfUpload",dto);
	}

}

 

 

그리고 이제 UploadController로 가셔야겠쥬?!

삭제 후 list로 바로 뜨도록 코드를 추가 작성해주세요!!

package spring.mvc.upload;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class UploadController {

	@Autowired
	UploadDaoInter dao;
	
	@GetMapping("/list") //시작페이지..인덱스 따로설정안하면 무조건/루트
	public ModelAndView list()
	{
		ModelAndView model=new ModelAndView();
		int totalcount=dao.getTotalCount();
		List<UploadDto>list=dao.getAllDatas();
		model.addObject("list",list );
		model.addObject("totalcount", totalcount);
		model.setViewName("upload/uploadList");
		return model;
	}
	
	//글쓰기누르면 폼이보이게
	@GetMapping("/form")
	public String form()
	{
		return "upload/uploadForm";
	}
	
	//내용을 입력후 db저장버튼 눌렀을때....파일입출력
	@PostMapping("/write")
	public String write(@ModelAttribute UploadDto dto,
			HttpServletRequest request)
	{
		//photo: 멀티파트:콘솔에 찍히게
		System.out.println("이미지명: "+dto.getPhoto().getOriginalFilename());
		//톰캣서버의 경로를 구해야 프로젝트 경로를 구할수있다
		//web-inf/save경로
		String path=request.getSession().getServletContext().getRealPath("/WEB-INF/save");
		
		System.out.println("path="+path);
		
		
	
		//이미지를 path에저장
		FileOutputStream fos=null;
		
		try {
			fos=new FileOutputStream(path+"\\"+dto.getPhoto().getOriginalFilename());
			
			byte []uploadData =dto.getPhoto().getBytes();
			fos.write(uploadData);
			
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			try {
				fos.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		}
		//dto다 들어오는데 이미지 이름 안들어옴
		//이미지 이름을 dto에 저장
		//db에 저장해야 나중에 가져옴
		dto.setPhotoname(dto.getPhoto().getOriginalFilename());
		
		//insert
		dao.insertUpload(dto);
		
		return "redirect:list";  //list컨트롤러
	}
	
    //삭제 후 다시 리스트로
	@GetMapping("/delete")
	public String delete(@RequestParam String num,
			HttpServletRequest request)
	{
		String path=request.getSession().getServletContext().getRealPath("/WEB-INF/save");
		System.out.println("path=" + path);
		
		dao.deleteUpload(num);
		return "redirect:list";
	}
}

 

 

 

이제 다음 list에 떠있는 케잌을 지워보도록 할게요:)

delete 클릭

 

그러면 다음과 같이 사이트에서는 사라졌지만

save폴더에는 아직 그대로 있네요??

 

완전히 지워진게 아니라는 거죠

추가 작업이 필요합니다:)

 

이따가 한 번에 하도록 할게요

 

이제 update가 작동되도록 해볼건데요:)

 

 

uploadForm을 복사해서 updateForm으로 가져온 후에 수정해볼게요

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"  %>
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
 <script src="https://code.jquery.com/jquery-3.5.1.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css">
<title>Insert title here</title>
</head>
<body>
<form action="update" method="post" enctype="multipart/form-data">
	<table class="table table-bordered" style="width: 400px;">
	<caption>글쓰기</caption>	
	<tr>
		<th>작성자</th>
		<td>
			<input type="text" name="writer" class="form-control input-sm" style="width: 100px;"
			value="${dto.writer }">
		</td>
	</tr>
	<tr>
		<th>사진</th>
		<td>
			<input type="file" name="photo" class="form-control input-sm" style="width: 300px;">
		</td>
	</tr>
	<tr>
		<td colspan="2">
			<textarea style="width: 400px; height: 150px;" class="form-control" name="content">
			${dto.content }
			
			</textarea>
		</td>
	</tr>
	<tr>
		<td colspan="2" align="center">
		<input type="hidden" name="num" value="${dto.num }" >
			<button type="submit" class="btn btn-sm btn-danger">db 수정</button>
		</td>
	</tr>
	</table>
	</form>
</body>
</html>

 

 

 

이제 우리가 해야할 순서를 그려보면

 

1.수정버튼 누르면 수정폼이 나와야겠네요

 

2. 그리고 db 수정을 누르면 수정 후 다시 list로 가야합니다.

 

 

1.수정버튼 누르면 수정폼이 나와야겠네요 --->컨트롤러 가서 코드 작성

//수정버튼 누르면 수정폼이 나온다
	@GetMapping("/updateform") //리스트의 수정버튼
	public ModelAndView updateform(@RequestParam String num)
	{
		ModelAndView model=new ModelAndView();
		UploadDto dto=dao.getData(num);
		model.addObject("dto", dto);
		model.setViewName("upload/updateForm");		
		return model;
	}

전체 UploadController.java

package spring.mvc.upload;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class UploadController {

	@Autowired
	UploadDaoInter dao;
	
	@GetMapping("/list") //시작페이지..인덱스 따로설정안하면 무조건/루트
	public ModelAndView list()
	{
		ModelAndView model=new ModelAndView();
		int totalcount=dao.getTotalCount();
		List<UploadDto>list=dao.getAllDatas();
		model.addObject("list",list );
		model.addObject("totalcount", totalcount);
		model.setViewName("upload/uploadList");
		return model;
	}
	
	//글쓰기누르면 폼이보이게
	@GetMapping("/form")
	public String form()
	{
		return "upload/uploadForm";
	}
	
	//내용을 입력후 db저장버튼 눌렀을때....파일입출력
	@PostMapping("/write")
	public String write(@ModelAttribute UploadDto dto,
			HttpServletRequest request)
	{
		//photo: 멀티파트:콘솔에 찍히게
		System.out.println("이미지명: "+dto.getPhoto().getOriginalFilename());
		//톰캣서버의 경로를 구해야 프로젝트 경로를 구할수있다
		//web-inf/save경로
		String path=request.getSession().getServletContext().getRealPath("/WEB-INF/save");
		
		System.out.println("path="+path);
		
		
	
		//이미지를 path에저장
		FileOutputStream fos=null;
		
		try {
			fos=new FileOutputStream(path+"\\"+dto.getPhoto().getOriginalFilename());
			
			byte []uploadData =dto.getPhoto().getBytes();
			fos.write(uploadData);
			
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			try {
				fos.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		}
		//dto다 들어오는데 이미지 이름 안들어옴
		//이미지 이름을 dto에 저장
		//db에 저장해야 나중에 가져옴
		dto.setPhotoname(dto.getPhoto().getOriginalFilename());
		
		//insert
		dao.insertUpload(dto);
		
		return "redirect:list";  //list컨트롤러
	}
	
	//삭제 후 다시 리스트로	
	@GetMapping("/delete")
	public String delete(@RequestParam String num,
			HttpServletRequest request)
	{
		String path=request.getSession().getServletContext().getRealPath("/WEB-INF/save");
		System.out.println("path=" + path);
		
		dao.deleteUpload(num);
		return "redirect:list";
	}
	
	
	//수정버튼 누르면 수정폼이 나온다
	@GetMapping("/updateform") //리스트의 수정버튼
	public ModelAndView updateform(@RequestParam String num)
	{
		ModelAndView model=new ModelAndView();
		UploadDto dto=dao.getData(num);
		model.addObject("dto", dto);
		model.setViewName("upload/updateForm");		
		return model;
	}
}

 

 

이제 실행시켜 볼게요 제가 김태리의 update를 눌렀더니

오른쪽 화면처럼 updateform으로 이동하는 게보이시죠?

그리고 작성했던 내용까지 form에 떠있습니다:)

 

 

 

2. 그리고 db 수정을 누르면 수정 후 다시 list로 가야합니다. -->Controller로 가서 추가 작성

//db수정 누르면 수정 후 리스트로
	@PostMapping("/update")
	public String update(@ModelAttribute UploadDto dto,
			HttpServletRequest request)
	{
		//photo: 멀티파트:콘솔에 찍히게
		System.out.println("이미지명: "+dto.getPhoto().getOriginalFilename());
		//톰캣서버의 경로를 구해야 프로젝트 경로를 구할수있다
		//web-inf/save경로
		String path=request.getSession().getServletContext().getRealPath("/WEB-INF/save");
		
		System.out.println("path="+path);
		
		
	
		//이미지를 path에저장
		FileOutputStream fos=null;
		
		try {
			fos=new FileOutputStream(path+"\\"+dto.getPhoto().getOriginalFilename());
			
			byte []uploadData =dto.getPhoto().getBytes();
			fos.write(uploadData);
			
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			try {
				fos.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		}
		//dto다 들어오는데 이미지 이름 안들어옴
		//이미지 이름을 dto에 저장
		//db에 저장해야 나중에 가져옴
		dto.setPhotoname(dto.getPhoto().getOriginalFilename());
		
		//update
		dao.updateUpload(dto);
		
		return "redirect:list";  //list컨트롤러
	}
	

 

전체 UploadController.java 

package spring.mvc.upload;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class UploadController {

	@Autowired
	UploadDaoInter dao;
	
	@GetMapping("/list") //시작페이지..인덱스 따로설정안하면 무조건/루트
	public ModelAndView list()
	{
		ModelAndView model=new ModelAndView();
		int totalcount=dao.getTotalCount();
		List<UploadDto>list=dao.getAllDatas();
		model.addObject("list",list );
		model.addObject("totalcount", totalcount);
		model.setViewName("upload/uploadList");
		return model;
	}
	
	//글쓰기누르면 폼이보이게
	@GetMapping("/form")
	public String form()
	{
		return "upload/uploadForm";
	}
	
	//내용을 입력후 db저장버튼 눌렀을때....파일입출력
	@PostMapping("/write")
	public String write(@ModelAttribute UploadDto dto,
			HttpServletRequest request)
	{
		//photo: 멀티파트:콘솔에 찍히게
		System.out.println("이미지명: "+dto.getPhoto().getOriginalFilename());
		//톰캣서버의 경로를 구해야 프로젝트 경로를 구할수있다
		//web-inf/save경로
		String path=request.getSession().getServletContext().getRealPath("/WEB-INF/save");
		
		System.out.println("path="+path);
		
		
	
		//이미지를 path에저장
		FileOutputStream fos=null;
		
		try {
			fos=new FileOutputStream(path+"\\"+dto.getPhoto().getOriginalFilename());
			
			byte []uploadData =dto.getPhoto().getBytes();
			fos.write(uploadData);
			
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			try {
				fos.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		}
		//dto다 들어오는데 이미지 이름 안들어옴
		//이미지 이름을 dto에 저장
		//db에 저장해야 나중에 가져옴
		dto.setPhotoname(dto.getPhoto().getOriginalFilename());
		
		//insert
		dao.insertUpload(dto);
		
		return "redirect:list";  //list컨트롤러
	}
	
	//삭제 후 다시 리스트로	
	@GetMapping("/delete")
	public String delete(@RequestParam String num,
			HttpServletRequest request)
	{
		String path=request.getSession().getServletContext().getRealPath("/WEB-INF/save");
		System.out.println("path=" + path);
		
		dao.deleteUpload(num);
		return "redirect:list";
	}
	
	
	
	//수정버튼 누르면 수정폼이 나온다
	@GetMapping("/updateform") //리스트의 수정버튼
	public ModelAndView updateform(@RequestParam String num)
	{
		ModelAndView model=new ModelAndView();
		UploadDto dto=dao.getData(num);
		model.addObject("dto", dto);
		model.setViewName("upload/updateForm");		
		return model;
	}
	
	//db수정 누르면 수정 후 리스트로
	@PostMapping("/update")
	public String update(@ModelAttribute UploadDto dto,
			HttpServletRequest request)
	{
		//photo: 멀티파트:콘솔에 찍히게
		System.out.println("이미지명: "+dto.getPhoto().getOriginalFilename());
		//톰캣서버의 경로를 구해야 프로젝트 경로를 구할수있다
		//web-inf/save경로
		String path=request.getSession().getServletContext().getRealPath("/WEB-INF/save");
		
		System.out.println("path="+path);
		
		
	
		//이미지를 path에저장
		FileOutputStream fos=null;
		
		try {
			fos=new FileOutputStream(path+"\\"+dto.getPhoto().getOriginalFilename());
			
			byte []uploadData =dto.getPhoto().getBytes();
			fos.write(uploadData);
			
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			try {
				fos.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		}
		//dto다 들어오는데 이미지 이름 안들어옴
		//이미지 이름을 dto에 저장
		//db에 저장해야 나중에 가져옴
		dto.setPhotoname(dto.getPhoto().getOriginalFilename());
		
		//update
		dao.updateUpload(dto);
		
		return "redirect:list";  //list컨트롤러
	}
	
}

 

실행시켜보도록 하쥬

 

 

 

 

 


 

 

파일탐색기에도 수정 삭제가 일어나도록 작업해주기

 

 

1. 삭제

 

삭제 되기 전에 처리되어야 하기 때문에

위와같이 표시한 곳에 다음 코드를 추가해주세요

		//삭제하기 전에 먼저 처리
		//지울파일 명이 무엇인지?
		String fileName=dao.getData(num).getPhotoname();
		
		//파일객체 생성.....만약 존재한다면 삭제
		File file=new File(path+"\\"+fileName);
		if(file.exists())
			file.delete();

 

 

2. 수정

 

수정 되기 전에 처리되어야 하기 때문에

다음과 같이 코드 추가해주세요

//dto 다 들어오는데 이미지 이름 안들어옴
      //이미지 이름을 dto에 저장
      //db에 저장해야 나중에 가져올 수 있음      
      
      
      //기존이미지 삭제하고,
         //수정하기 전에 먼저 처리
         //지울파일명이 무엇인지? 
         String fileName = dao.getData(dto.getNum()).getPhotoname();
            
         //파일객체 생성.. 만약 존재한다면 삭제
         File file = new File(path + "\\" + fileName);
         if(file.exists()) //존재하면 true
            file.delete();

 

728x90
반응형