-
JSP 절대 경로로 업로드 그런데 상대 경로는?WEB/JSP 2018. 11. 10. 04:55
글 목적
JSP 파일 업로드를 공부하면서 어떻게 파일 업로드를 해야되고, 어디 경로에 저장되는지 배웠다.
그리고 궁금한 점들도 공부해보면서 어떻게 하면 되는지 왜 안되는지 기록하고, 공부하면서 도움
될만한 블로그들을 소개하려고 한다.
필수 라이브러리파일 업로드를 위한 필수 라이브러리가 필요한데 cos.jar라고 하는 라이브러리다.
이 라이브러리를 서블렛 사이트에서 다운 받아야된다.
사이트 링크
설치방법
설치방법은 사이트에 들어가셔서 왼쪽 메뉴창에 있는 com.oreilly.servlet라는 게시판을 클릭하면제일 아래에 cos-26Dec2008.zip이라는 파일이 있는데 그것을 다운받으면 된다.
아니면 아래 파일 링크를 다운받아도 된다.
프로젝트 디렉토리
샘플 파일
fileForm.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>파일 업로드 예제</title>
</head>
<body>
<h2>파일 업로드 예제/절대경로 저장</h2>
<form action="fileFormOk.jsp" method="post" enctype="multipart/form-data">
첨부 파일 : <input type="file" name="file"><br />
<input type="submit" value="File Upload">
</form>
</body>
</html>
fileFormOk.jsp<%@page import="java.util.Enumeration"%>
<%@page import="com.oreilly.servlet.multipart.DefaultFileRenamePolicy"%>
<%@page import="com.oreilly.servlet.MultipartRequest"%>
<%@page import="javax.servlet.*" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//절대경로
String path = request.getRealPath("fileUpload");//파일이 저장되는 경로
//상대 경로저장
//String path = request.getSession().getServletContext().getRealPath("fileUpload");
/*
* 이 부분은 상대 경로로 저장하려고 했으나 상대 경로로 저장이 안되고, 절대 경로로 저장이 된다.
* getContextPath()를 사용하면 Servlet2.5 이상부터 사용이 가능하다고 하는데, 이 부분은 어떻게 해결해야될지 감이 안잡힘.
*/
int size = 1024 * 1024 * 10; // 업로드 파일 용량: 10M
String file = ""; //업로드 파일 이름(오리지널 파일이름이 있으면, 자동으로 1,2,3이 붙여진다.)
String oriFile = ""; // 이전 업로드 파일 이름
//상대경로
//String file =""; // 상대경로 업로드파일
//String oriFile =""; //
try{
// 정보를 갖고 있는 request객체, 서버쪽 경로, 업로드 용량, 파일이름깨지지않게,오리지널파일이름뒤에 1,2,3 붙이게하는 메소드)
MultipartRequest multi = new MultipartRequest(request, path, size, "UTF-8", new DefaultFileRenamePolicy());
//MultipartRequest multi = new MultipartRequest(request, path, size, "UTF-8", new DefaultFileRenamePolicy());
Enumeration files = multi.getFileNames();
String str = (String)files.nextElement();
file = multi.getFilesystemName(str);// 실제 파일 이름
oriFile = multi.getOriginalFileName(str); // 이전 파일 이름
/* -- 상대 경로용
Enumeration files = multi.getFileNames();
String str = (String)files.nextElement();
file = multi.getFilesystemName(str);
oriFile = multi.getOriginalFileName(str);
*/
} catch (Exception e) {
e.printStackTrace();
}
%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>파일 업로드 결과</title>
</head>
<body>
<div align="center">
<%
if(file == null){
out.println("파일이 업로드 되지 않았습니다.");
} else{
out.println(file+"파일이 저장되었습니다");
}
%>
</div>
</body>
</html>
예상에러절대경로에 있는곳에 업로드 파일을 생성해줘야되는데 생성 안해줘서 생기는 에러라고 예상된다.로컬디스크(C:) -> 사용자 ->사용자(사용자 이름) -> eclipse-workspace -> .metadata -> .plugins ->org.eclipse.wst.server.core -> tmp[숫자] ->wtpwebapps -> 프로젝트이름 -> 여기에 fileUpload 라는폴더 생성!!!폴더 생성하고 전체 경로를 보면 아래와 같아야된다.파일 저장 절대 경로
~\eclipseworkspace\.metadata\.plugins
\org.eclipse.wst.server.core\tmp4\wtpwebapps\dpacs\fileUpload
빨간색이 워크스페이스에 있는 이클립스 경로입니다. 다른말로 절대 경로입니다.
dpacs는 프로젝트 이름이고
fileUpload는 폴더 이름입니다.
필자가 궁금한점
구글링하다보면 절대경로에 대한 설명은 많은데 상대경로에 대한 설명은 없거나 잘 없다.
왜그런지는 아직 잘 모르겠지만, 파일저장을 상대 경로에 할 수 없기 때문이 아닐까 싶다.
해결책이 있다면 댓글로 공유해주시면 감사하겠습니다.
학습에 도움됐거나 참조한 블로그
1. 블로그 ----> JSP 정리 - 파일 업로드/다운로드 기능
2. 블로그 ----> InputStream, OutputStream으로 파일 이동하기
위 글이 도움이 되셨으면 좋아요와 댓글 부탁드립니다.
'WEB > JSP' 카테고리의 다른 글
http란? (0) 2018.11.30 nio란? (0) 2018.11.30 공부하는데 참조한 블로그 (0) 2018.11.09 eclipse show empty error message 이클립스가 빈 에러 메세지를 보여준다. (0) 2018.11.08 favicon img 생성 및 적용하기 (0) 2018.11.05 댓글