- 2019/09/18 [파일 첨부]2019년 09월 18일
- 조별하
- 작성자
- 2019.09.18.:22
[ 파일전송 ]
- 사용자가 클래스를 이용해서 직접 생성 가능
- 외부 라이브러리 활용 (cos.jar)[cos.jar 다운]
http://www.servlets.comServlets.com
Home What's New? com.oreilly.servlet Servlet Polls Mailing Lists List Archives Servlet Engines Servlet ISPs Servlet Tools Documentation Online Articles The Soapbox "Java Servlet Programming, Second Edition" "Java Enterprise Best Practices" Speaking & Slide
www.servlets.com
▶ 페이지에 접속해서, com.oreilly.servlet 을 클릭!!
▶ 주요 class MultipartRequest & class FileRenamePolicy & DefaultFileRenamePolicy
▶ cos-20.08.zip 를 다운로드!!
▶ 위에서 받은 D:\java0514\setup\cos-20.08\lib 경로에 있는 cos.jar 을
WEb_INF /lib 위치로 복사하자cf) 외부 라이브러리는 WEB-INF /lib 에 저장시켜둔다
1. 파일첨부
1) Test1
▶ 1. 파일 첨부시 enctype="multipart/form-data" 속성이 꼭 필요하다
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>pdsTest1.jsp</title> </head> <body> <h3>* 파일 첨부 테스트*</h3> <form method="post" action="pdsTestProc1.jsp" enctype="multipart/form-data"> <!-- 파일첨부시 필수!! --> 이름 : <input type="text" name="uname"><br> 제목 : <input type="text" name="subject"><br> 내용 : <textarea rows="5" cols="20" name="content"><br> 첨부 : <input type="file" name="filenm"><br> <input type="submit" value="전송"><br> </form> </body> </html>
▶ 출력
2) pdsTestProc1
<% 1) request.setCharacterEncoding("UTF-8"); 2) out.print(request.getParameter("uname")); out.print("<hr>"); out.print(request.getParameter("subject")); out.print("<hr>"); out.print(request.getParameter("title")); out.print("<hr>"); out.print(request.getParameter("filenm")); out.print("<hr>"); %>
> 1) 한글 인코딩 (조합형)
> 2) 받아온값 화면에 출력결과: <form> 태그에 enctype 속성이 추가가 되면, request객체가 가지고 있는값을
제대로 가져올 수 없다3) 아래와 같이 cos.jar의 클래스를 이용
<% try{ //실제 물리적 경로 String saveDirectory= application.getRealPath("/storage"); //저장 최대 용량 int maxPostSize= 1024*1024*10; //한글조함 String encoding="UTF-8"; //사용자가 전송한 텍스트 정보 및 파일 저장하기 MultipartRequest mr = new MultipartRequest(request,saveDirectory,maxPostSize,encoding,new DefaultFileRenamePolicy()); out.print("<p> 파일 전송 저장 성공!!</p>"); }catch(Exception e){out.println(e);out.println("<p>파일 업로드 실패!!</p>");out.println("<a href='javascript:history.back();'>[다시시도]</a>");} %>
1) saveDirectory 에 저장 경로를 application.getRealPath()를 이용해서 변수에 저장
2) maxPostSize 전송하는 파일 최대 사이즈를 1024*1024*10 으로 설정
3) 한글 인코딩 문자열을 encoding에 할당
4) MultipartRequest 를 이용하여 값을 담은 변수를 함수에 적용하여 사용하였다.
성공~~! 4) 전송한 파일을 확인할 수 있는 경로
D:\java0514\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\myweb\storage
5)데이터 가져오기
1 mr 참조변수가 가리키고 있는 텍스트 정보를 가져오기
//1) mr 참조변수가 가리키고 있는 텍스트 정보를 가져오기 out.print(mr.getParameter("uname")); out.print("<hr>"); out.print(mr.getParameter("subject")); out.print("<hr>"); out.print(mr.getParameter("content")); out.print("<hr>");
2 storage폴더에 저장된 파일 정보 확인하기
> mr에서 input type=file 을 전부 가져온다
Enumeration files=mr.getFileNames();
3 2) 의 files가 가지고 있는 값에서 개별 접근
String item=(String)files.nextElement();
out.print(item); //filenm4 3)에서 item이름으로 전송된 실제파일을
mr 객체에서 가져오기String ofileName=mr.getOriginalFileName(item); String fileName=mr.getFilesystemName(item); out.print("원본 파일명 : "+ofileName ); out.print("<hr>"); out.print("리네임 파일명 : "+fileName );
5. 저장된 파일의 기타 세부 정보 확인하기
File file= mr.getFile(item); if(file.exists()){ //파일이 존재하는지? out.print("파일명 : "+file.getName() ); out.print("<hr>"); out.print("파일 크기 : "+file.length() ); out.print("<hr>"); }else out.print("해당 파일이 존재하지 않은!!!!");
6. 6) 전송시킨 파일 다운로드 하기
// .html .jsp .asp .php // .png .jpg .gif .avi .mp3 out.print("첨부파일 : " ); out.print("<a href='../storage/"+file.getName()+"'>"); out.print(file.getName()); out.print("</a>");
> (단, 웹브라우저에서 해석되는 페이지는 제외)
2. 다중 파일 첨부 Test2
1) Test2
▶ 첨부파일 3개를 테스트해보았다
2) TestProc2
<%@page import="com.oreilly.servlet.multipart.DefaultFileRenamePolicy"%> <%@page import="com.oreilly.servlet.MultipartRequest"%> <%@page import="java.util.*" %> <%@page import="java.io.*" %> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>pdsTestProc2.jsp</title> </head> <body> <h3>* 파일 첨부 테스트 결과 (다중)*</h3> <% try{ String saveDirectory= application.getRealPath("/storage"); int maxPostSize= 1024*1024*10; String encoding="UTF-8"; MultipartRequest mr = new MultipartRequest(request ,saveDirectory ,maxPostSize ,encoding ,new DefaultFileRenamePolicy()); out.print("<p> 파일 전송 저장 성공!!</p>"); //1) mr 참조변수가 가리키고 있는 텍스트 정보를 가져오기 out.print(mr.getParameter("uname")); out.print("<hr>"); out.print(mr.getParameter("subject")); out.print("<hr>"); out.print(mr.getParameter("content")); out.print("<hr>"); //파일 업로드(다중) String item=""; String ofileName=""; String fileName=""; File file=null; //<input type=file name=filenm1> //<input type=file name=filenm2> //<input type=file name=filenm3> 3개를 전부 가져온다 Enumeration files=mr.getFileNames(); int idx=1; while(files.hasMoreElements()){ item=(String)files.nextElement(); ofileName=mr.getOriginalFileName(item); fileName=mr.getFilesystemName(item); if(fileName!=null){ file=mr.getFile(item);// 파일 담기 if(file.exists()){//파일 존재하는지? long filesize= file.length(); out.print(idx+") 원본파일명 : "+ofileName+"<hr>"); out.print(idx+") 파일명 : "+file.getName()+"<hr>"); out.print(idx+") 원본파일명 : "+filesize+"<hr>"); }//if end }//if end idx++; }//while end }catch(Exception e){out.println(e);out.println("<p>파일 업로드 실패!!</p>");out.println("<a href='javascript:history.back();'>[다시시도]</a>");} %> </body> </html>
'JAVA 교육 > myWeb' 카테고리의 다른 글
2019/10/01 EL과 JSTL (0) 2019.10.01 2019/09/20 메일보내기 (0) 2019.09.20 2019/09/19 myWeb 포토 갤러리 (0) 2019.09.19 2019/09/17 myweb 쿠키(아이디 저장) (0) 2019.09.17 2019/09/16 myWeb 회원가입과 아이디 중복확인 (1) 2019.09.16 다음글이전글이전 글이 없습니다.댓글