프로젝트 생성
FileUp
WEB-INF > lib > cos.jar 파일 넣어주기.
UploadInput.html 파일 생성 (jsp로도 가능)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<script type="text/javascript">
function send(f) {
var title = f.title.value.trim();
var photo = f.photo.value.trim();
if(title == "") {
alert("제목을 입력하세요");
return;
}
if(photo == "") {
alert("파일을 선택하세요");
return;
}
// FileUploadAction servlet
f.action = "upload.do";
f.submit();
} // send()
</script>
</head>
<body>
<!--
파일 업로드 시, 고려사항
1. 전송방식 : POST
2. enctype = "multipart/form-data"
enctype : 폼을 전송할 때, 사용할 인코딩 방법
-->
<form method="POST" enctype="multipart/form-data"> <!-- 공식으로 정해진 부분이다. -->
제목 : <input name = "title"><br>
첨부 : <input type = "file" name = "photo"><br>
<input type="button" value="업로드" onclick="send(this.form);">
</form>
</body>
</html>
C 드라이브에 upload 폴더 생성
FileUploadAction 서블릿 파일 생성
package action;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotationi.WebServlet;
import javax.servlet.HttpServlet;
import javax.servlet.HttpServletRequest;
import javax.servlet.HttpServletResponse;
import com.oreilly.servlet.MultipartRequest;
import com.oreilly.servlet.multipart.DefaultFileRenamePolicy;
@WebServlet("/upload.do") // .do:확장자, 확장자는 꼭 do로 하지않고 .abc도 가능하다.
public class FileUploadAction extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
String path="C:/upload"; // 아까 만들었던 업로드 폴더의 절대주소
int max_size = 1024*1024*100; // 100메가 라는 뜻, 버퍼메모리라 크게 잡아도 괜찮다.
MultipartRequest mr = new MultipartRequest (
request, path, max_size, "utf-8", new DefaultFileRenamePolicy());
// utf-8 수신 인코딩. DefaultFileRenamePolicy 동일 파일 명 있을 시, 다른 이름으로 해라
RequestDispatcher disp = request.getRequestDispatcher("result.jsp");
disp.forward(request, response);
}
protected void doGet (HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.getWriter().append("Served at: ").append(request.getContextPath());
}
}
서블릿 설정 시 추가하지 못했던 메서드, 또는 추가하고 싶은 메서드가 있을 때 편리한 방법
코드 부분 우클릭 > Source > Override / Implement Methods 에서 찾아서 넣으면 된다.
FileUploadAction 서블릿 파일 내용 추가
String filename = "no_file";
file f = mr.getFile("photo");
if (f != null) {
filename = f.getName();
System.out.println(filename);
}
String title = mr.getParameter("title");
request.setAttribute("title", title);
request.setAttribute("filename", filename);
위 내용 추가 아래 결과
package action;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotationi.WebServlet;
import javax.servlet.HttpServlet;
import javax.servlet.HttpServletRequest;
import javax.servlet.HttpServletResponse;
import com.oreilly.servlet.MultipartRequest;
import com.oreilly.servlet.multipart.DefaultFileRenamePolicy;
@WebServlet("/upload.do") // .do:확장자, 확장자는 꼭 do로 하지않고 .abc도 가능하다.
public class FileUploadAction extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
String path="C:/upload"; // 아까 만들었던 업로드 폴더의 절대주소
int max_size = 1024*1024*100; // 100메가 라는 뜻, 버퍼메모리라 크게 잡아도 괜찮다.
MultipartRequest mr = new MultipartRequest (
request, path, max_size, "utf-8", new DefaultFileRenamePolicy());
// utf-8 수신 인코딩. DefaultFileRenamePolicy 동일 파일 명 있을 시, 다른 이름으로 해라
String filename = "no_file";
file f = mr.getFile("photo");
if (f != null) {
filename = f.getName();
System.out.println(filename);
}
String title = mr.getParameter("title");
request.setAttribute("title", title);
request.setAttribute("filename", filename);
RequestDispatcher disp = request.getRequestDispatcher("result.jsp");
disp.forward(request, response);
}
protected void doGet (HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.getWriter().append("Served at: ").append(request.getContextPath());
}
}
result.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
제목 : ${requestScope.title} <br>
<!-- 실제 이미지는 c드라이브에 저장되어 있으나,
<img>는 웹 경로상(webContent)의 이미지만 가져올 수 있다.
따라서 현재는 이미지를 불러올 수 없다.-->
<img src="${filename}" width="200">
</body>
</html>
FileUploadAction 클래스 내용 수정
package action;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotationi.WebServlet;
import javax.servlet.HttpServlet;
import javax.servlet.HttpServletRequest;
import javax.servlet.HttpServletResponse;
import com.oreilly.servlet.MultipartRequest;
import com.oreilly.servlet.multipart.DefaultFileRenamePolicy;
@WebServlet("/upload.do") // .do:확장자, 확장자는 꼭 do로 하지않고 .abc도 가능하다.
public class FileUploadAction extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
String path="C:/upload"; // 아까 만들었던 업로드 폴더의 절대주소
int max_size = 1024*1024*100; // 100메가 라는 뜻, 버퍼메모리라 크게 잡아도 괜찮다.
MultipartRequest mr = new MultipartRequest (
request, path, max_size, "utf-8", new DefaultFileRenamePolicy());
// utf-8 수신 인코딩. DefaultFileRenamePolicy 동일 파일 명 있을 시, 다른 이름으로 해라
String filename = "no_file";
file f = mr.getFile("photo");
if (f != null) {
filename = f.getName();
System.out.println(filename);
}
String web_path = "/upload";
ServletContext application = request.getServletContext();
String path = application.getRealPath(web_path);
System.out.println(path);
String title = mr.getParameter("title");
request.setAttribute("title", title);
request.setAttribute("filename", filename);
RequestDispatcher disp = request.getRequestDispatcher("result.jsp");
disp.forward(request, response);
}
protected void doGet (HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.getWriter().append("Served at: ").append(request.getContextPath());
}
}
result.jsp 내용 수정
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
제목 : ${requestScope.title} <br>
<!-- 실제 이미지는 c드라이브에 저장되어 있으나,
<img>는 웹 경로상(webContent)의 이미지만 가져올 수 있다.
따라서 현재는 이미지를 불러올 수 없다.-->
<img src="upload/${filename}" width="200">
</body>
</html>
JSP 이미지 갤러리 (0) | 2022.08.26 |
---|---|
JSP 세션 트래킹 ( 쿠키 실습 - 쇼핑몰 장바구니 ) (0) | 2022.08.25 |
JSP ( JSON 형식 동영상 플레이 리스트 ) (0) | 2022.08.25 |
JSP JSON, Ajax (Asynchronous JavaScript and XML) (0) | 2022.08.25 |
JSP JSTL(JSP Standard Tag Library) (0) | 2022.08.25 |