JSP를 통한 파일 업로드학부공부/웹시스템설계및개발2018. 9. 15. 00:48
Table of Contents
반응형
JSP를 통한 파일 업로드를 알아보자.
cos.jar을 통한 파일 업로드를 할 것이고, 업로드 되는 파일의 갯수는 2개이다.
pageEncoding은 UTF-8로 맟춰주었다.
코드를 통해서 알아보자.
다음 코드는 FileuploadForm 이다.
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>파일 업로드</title></head><body><center><form action="fileUpload.jsp" method="post"enctype="multipart/form-data"># action이나 어떤 파일의 전송에서 필요한 부분인데 ,# enctype = "multipart/form-data"를 적어 주어야 한다 .<table border=1><tr><td colspan=2 align=center><h3>파일 업로드 폼</h3></td></tr><tr><td>올린 사람 :</td><td><input type="text" name="name"></td></tr><tr><td>제목</td><td><input type="text" name="subject"></td></tr><tr><td>파일명1 :</td><td><input type="file" name="fileName1"></td></tr><tr><td>파일명2 :</td><td><input type="file" name="fileName2"></td></tr><tr><td colspan=2 align=center><input type="submit" value="전송"></td></tr></table></form></center></body></html>
다음은 FileUpload.jsp이 부분에서 실질적으로 파일을 업로드 해주는 역할을 하게 된다 .파일 업로드를 해주기 위해서는 사전 작업이 필요하다 .cos.jar 이라는 파일이 필요한데 ,http://servlets.com/cos/ < -- 이 사이트를 접속하면 다운 받을 수 있다 .다음 파일을 다운 받고 압축을 해제해 준다 .
압축을 풀고 cos.jar파일을 복사해서 내가 사용하고자 하는 프로젝트 내의 lib 폴더에 복사해서 붙여 넣기 해준다.
그러면 사전 작업은 완료되었다.
소스 코드로 돌아가 보자 .
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><%@ page import="com.oreilly.servlet.MultipartRequest"%>// 파일 업로드를 하기 위한 몇개의 Import<%@ page import="com.oreilly.servlet.multipart.DefaultFileRenamePolicy"%>// 파일 업로드를 하기 위한 몇개의 Import<%@ page import="java.util.*"%><%// 소스코드가 위치하는 폴더 (WebContent)에 upload 폴더를 생성String uploadPath = request.getRealPath("Example_Fileupload/upload");// getRealPath를 설정할 때 upload 파일의 경로를 제대로 설정해 주어야 한다.out.print(uploadPath);// 이 부분은 내가 설정해준 경로가 맞는지 확인차원에서 .int size = 10 * 1024 * 1024;// 파일의 size 설정String name = "";String subject = "";String filename1 = "";String filename2 = "";String origfilename1 = " ";String origfilename2 = " ";// String으로 변수를 만들어 주는 이유는 작성자와 제목 , 파일이름 , 원래 파일이름 명을 저장시켜 주기 위해서// 그리고 파일업로드를 시행하는 메서드는 try - catch 문으로 감싸준다.try {MultipartRequest multi = new MultipartRequest(request, uploadPath, size, "UTF-8",new DefaultFileRenamePolicy());# MultipartRequest 가 file업로드 메서드 인데 ,# 순차적으로 request , 파일경로 , 크기 , 유형 , 파일이름 재설정name = multi.getParameter("name");# 작성자 이름을 가져온다.subject = multi.getParameter("subject");# 제목을 가져온다Enumeration files = multi.getFileNames();저장되어 있는 파일의 이름을 가져온다String file1 = (String) files.nextElement();# 직역하면 파일의 다음요소를 가르키는데 , 이것은 초기값 다음을 가져와야 한다고 한다.filename1 = multi.getFilesystemName(file1);# 시스템에 저장되어 있는 file이름을origfilename1 = multi.getOriginalFileName(file1);# 파일의 원래 이름을 가져온다.String file2 = (String) files.nextElement();filename2 = multi.getFilesystemName(file2);origfilename2 = multi.getOriginalFileName(file2);} catch (Exception e) {e.printStackTrace();}%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>파일 업로드</title></head><body><form name="fileCheck" action="fileCheck.jsp" method="post"><input type="hidden" name="name" value="<%=name%>"> <inputtype="hidden" name="subject" value="<%=subject%>"> <inputtype="hidden" name="filename1" value="<%=filename1%>"> <inputtype="hidden" name="filename2" value="<%=filename2%>"> <inputtype="hidden" name="origfilename1" value="<%=origfilename1%>"><input type="hidden" name="origfilename2" value="<%=origfilename2%>"><a href="#" onclick="javascript:fileCheck.submit()"> 업로드 확인 및 다운로드페이지 이동</form></body></html>다음은 FileCheck.jsp이 부분은 file이 제대로 업로드가 되었는지 확인해 주는 부분<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><%request.setCharacterEncoding("UTF-8");// request 의 인코딩 설정String name = request.getParameter("name");String subject =request.getParameter("subject");String filename1 =request.getParameter("filename1");String filename2 =request.getParameter("filename2");String origfilename1 =request.getParameter("origfilename1");String origfilename2 =request.getParameter("origfilename2");// 순차적으로 작성자와 제목 파일명 오리지널 파일명을 가져온다.%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>파일 업로드 확인 및 다운로드</title></head><body>올린사람 :<%=name%><br> 제목 :<%=subject%><br> 파일명1:<a href="file_down.jsp?file_name=<%=filename1 %>"><%=origfilename1%></a>// file_down 으로 file_name을 넘겨주고 , origfilename1의 값을 출력시켜준다.<br> 파일명2:<a href="file_down.jsp?file_name=<%=filename2 %>"><%=origfilename2%></a><br></body></html>마지막으로 FileDonw.jsp<%@ page import="java.io.*"%><%@ page import="java.io.File"%><%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><%String fileName = request.getParameter("file_name");// file_name의 값을 받아오는데 , 전 jsp에서 넘겨줄 것이다.String savePath = "Example_Fileupload/upload";// savaPath 설정 할 때 , 정확한 경로 값을 설정 할 것 , 같은 폴더 내에 존재 하더라도 폴더 / .jsp orServletContext context = getServletContext();String sDownloadPath = context.getRealPath(savePath);System.out.println("다운로드 위치 " + sDownloadPath);// 다운로드 위치가 제대로 되어있는지 확인String sFilePath = sDownloadPath + "\\" + fileName;// 다운로드의 위치와 파일명이 제대로 되어 있는지 확인byte b[] = new byte[4096];File oFile = new File(sFilePath);FileInputStream in = new FileInputStream(sFilePath);String sMimeType = getServletContext().getMimeType(sFilePath);System.out.println("유형 : " + sMimeType);if (sMimeType == null) {sMimeType = "application/octet-stream";}// octet-stram은 8비트로 된 일련의 데이터를 뜻한다.// 지정되지 않은 파일 형식을 의미response.setContentType(sMimeType);// 한글 업로드 (이 부분이 한글 파일명이 깨지는 것을 방지해 준다)String sEncoding = new String(fileName.getBytes("UTF-8"), "8859_1");// 이 부분이 모든 파일 링크를 클릭했을 때 다운로드 화면이 출력되게// 처리하는 부분이다.ServletOutputStream out2 = response.getOutputStream();int numRead;// 바이트 배열 b의 0번부터 numRead번 까지 브라우저로 출력while ((numRead = in.read(b, 0, b.length)) != -1) {out2.write(b, 0, numRead);}out2.flush();out2.close();in.close();%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Download</title></head><body></body></html>
반응형
'학부공부 > 웹시스템설계및개발' 카테고리의 다른 글
EL의 정적 메소드 사용방법 (0) | 2018.09.23 |
---|---|
<%@ page isELIgnored = "false or TRUE" %> (0) | 2018.09.22 |
EL의 자바빈즈 기반 기초 . (0) | 2018.09.15 |
표현언어 EL 이란 무엇일까 ?? (0) | 2018.09.15 |
파일 업로드 (0) | 2018.09.07 |
@IT grow. :: IT grow.
#IT #먹방 #전자기기 #일상
#개발 #일상