💾 설치 : Maven Repository: com.jfinal » cos » 2020.4 (mvnrepository.com)
* \웹프로젝트\WebContent\WEB-INF\lib 위치에 설치한 jar 파일을 넣기 *
📂 파일 업로드
form.jsp
<body>
<form id="Action" action="<%=request.getContextPath()%>/action.jsp" method="post" enctype="multipart/form-data">
<div class="form-group">
사진 :
<input type="file" name="image">
</div>
<button id="btn" type="buttion" onclick="clickBtn()">추가</button>
</form>
<script>
function clickBtn() {
$('#Action').submit();
}
</script>
</body>
<form enctype="multipart/form-data">의 형태로 생성한다.
<input type="file" name="image">와 같이 type을 file로 지정한다.
버튼을 클릭하면 action.jsp로 이동한다. (action.jsp에서 사진 업로드 처리)
action.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="com.oreilly.servlet.MultipartRequest" %> <!-- request 대신 -->
<%@ page import="com.oreilly.servlet.multipart.DefaultFileRenamePolicy" %> <!-- 파일이름 중복을 피할 수 있도록 -->
<%
// 웹 프로젝트 위치에 넣어도 된다 (이클립스에서 사진 추가되는 것을 실시간으로 확인 가능)
// MultipartRequest mr = new MultipartRequest(request, "C:/Users/fjdks/Desktop/erp/WebContent/image", 1024*1024*1024, "utf-8", new DefaultFileRenamePolicy());
MultipartRequest mr = new MultipartRequest(request, request.getRealPath("/image"), 1024*1024*1024, "utf-8", new DefaultFileRenamePolicy());
System.out.println("저장되는 경로(실제 서버) : "+request.getRealPath("/image"));
String fileName = mr.getFilesystemName("image");
System.out.println("사진 이름 : "+fileName);
%>
MultipartRequest를 통해 사진을 저장한다. (웹 프로젝트 위치 or 서버 위치)
request.getRealPath()로 실제 서버 위치에 접근할 수 있다.
(이클립스에서는 사진이 추가되는 것이 보이지 않는다. 웹 프로젝트 위치로 접근하면 사진이 추가되는 것을 실시간으로 확인할 수 있다)
form.jsp에서 enctype="multipart/form-data"으로 받아왔기 때문에, request.getParameter()를 사용할 수 없다.
파일명은 mr.getFilesystemName()을 사용하여 받고, 일반적인 값은 mr.getParameter()를 통해 받아온다.
* request.getRealPath("/image")가 작동되도록 WebContent 아래에 image 파일을 생성했다 *
📂 이전 파일 삭제
action.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="com.oreilly.servlet.MultipartRequest" %> <!-- request 대신 -->
<%@ page import="com.oreilly.servlet.multipart.DefaultFileRenamePolicy" %> <!-- 파일이름 중복을 피할 수 있도록 -->
<%@ page import="java.io.File" %>
<%
// 이렇게 원하는 위치를 직접 넣어도 되긴 함(프로젝트 파일에 실시간으로 추가되는거 볼 수 있음 ㅋㅋ)
// MultipartRequest mr = new MultipartRequest(request, "C:/Users/fjdks/Desktop/erp/WebContent/image", 1024*1024*1024, "utf-8", new DefaultFileRenamePolicy());
MultipartRequest mr = new MultipartRequest(request, request.getRealPath("/image"), 1024*1024*1024, "utf-8", new DefaultFileRenamePolicy());
System.out.println("저장되는 경로(실제 서버) : "+request.getRealPath("/image"));
String fileName = mr.getFilesystemName("image");
System.out.println("저장된 사진 이름 : "+fileName);
// 실제로는 이전 사진 이름을 DB에서 불러온다
String beforeImg = "fullmetalAlchemist.PNG";
// 이전 사진명을 통해 실제로 삭제될 사진을 가져온다
String deleteImgName = request.getRealPath("/image/") + beforeImg;
File deleteImg = new File (deleteImgName);
// 이전 사진이 경로에 존재한다면 삭제한다
if (deleteImg.exists() && deleteImg.isFile()){
deleteImg.delete();// 사진 삭제
System.out.println("삭제된 이전 사진 : "+beforeImg);
}
%>
임시로 이전 사진의 이름을 "fullmetalAlchemist.PNG"로 설정하였지만 실제로는 DB에서 값을 받아와야 한다.
경로 + 사진 이름까지 담겨진 deleteImgName 변수를 File 형태로 만든다.
만약 deleteImg의 경로에 파일이 존재하고 deleteImg가 파일이라면, 해당 사진(이전 사진)을 삭제한다.
'Web > JSP' 카테고리의 다른 글
[jsp]에서 받은 문장의 enter값을 DB에 저장하는 방법 (1) | 2021.11.13 |
---|---|
[jsp] 화면 페이징 구현하기 (0) | 2021.09.27 |
[JSP] mariaDB에 값 저장 및 읽기 / mariaDB (0) | 2021.08.27 |
JSP 다른 화면으로 값 넘기는 방법 (0) | 2021.08.23 |
JSP의 기초 (0) | 2021.08.20 |