- 2019/09/18 [파일 첨부]2019년 09월 18일
- 조별하
- 작성자
- 2019.09.18.:22
[ 파일전송 ]
- 사용자가 클래스를 이용해서 직접 생성 가능
- 외부 라이브러리 활용 (cos.jar)[cos.jar 다운]
http://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 다음글이전글이전 글이 없습니다.댓글