겉바속촉
[spring] 게시판 만들기 upload 본문
지난 번에 이어서 해보도록 하겠습니다
2020/07/02 - [취업일기/SPRING] - [spring] Upload 프로젝트 생성 후 세팅해주기
퀀텀 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();
'IT일기(하반기) > SPRING' 카테고리의 다른 글
[spring] 제발 외우기 (0) | 2020.07.07 |
---|---|
[spring] 사이트 만들기 (0) | 2020.07.06 |
[spring] Upload 프로젝트 생성 후 세팅해주기 (4) | 2020.07.02 |
[spring] 입출력 연습하기 (0) | 2020.07.02 |
[spring] 게시판만들기2-수정삭제편 (0) | 2020.07.01 |