728x90
반응형

💾 설치 : 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가 파일이라면, 해당 사진(이전 사진)을 삭제한다.

 

이전 사진이 삭제되었다.

 

728x90
반응형

+ Recent posts