cos 사용하는 방법도 잇음 - 궁금하면 google에 쳐보세욘
이 예제는 database 전달 없음
⚡ 첨부파일 기능
첨부파일은 get으로 날릴수 없음 => post로만 날릴 것!
- fileupload.html
enctype :
기본(따로 작성안할시)이 application/x-www-form-urlencoded 으로 되어있음
multipart/form-data : input type이 파일일 경우는 무조건 이걸로 받아야함
form태그 속성
<body> <form id="frm"> 첨부파일 : <input type="file" name="mfile" id="mfile"><br> <input type="button" id="btn" value="전송"> </form> </body> <script type="text/javascript"> $(function(){ var result=""; //file 속성 확인을 위한 변수 $("#btn").click(function(){ if($("#mfile").val() != ""){ //파일 첨부시 var filesize = $("#mfile")[0].files[0].size; //size 정상출력 var filetype = $("#mfile")[0].files[0].type; //image/jpeg 출력 if(filesize > 2097152){ //2MB이상 alert("파일첨부용량은 2MB이하만 가능합니다"); result = "no"; }else{ //2MB이하이며 첨부파일시 파일속성은 이미지만 받음 var $f = ["png","jpeg","jpg","gif","webp","svg","bmp"]; var i; for(i=0; i<$f.length; i++){ if(filetype.indexOf($f[i]) >= 0){ result = "ok"; break; }else{ result = "no"; } } if(result == "ok" || result == ""){ $("#frm").attr("method","post"); $("#frm").attr("action","./fileok.do"); $("#frm").attr("enctype", "multipart/form-data"); $("#frm").submit(); }else{ alert("해당 첨부파일은 이미지 및 압축(zip)파일만 가능합니다."); $("#mfile").val(""); } } }else{ alert("아무것도 첨부되지 않았습니다"); } }); }) </script>
- fileok.java
@의 역할 - 첨부파일 환경설정 세팅
@MultipartConfig( )
fileSizeThreshold :한개의 파일 전송 크기
maxFileSize = 업로드 가능한 최대 크기
maxRequestSize = 여러개의 파일 전체 용량
- 라이브러리를 객체화 하지 않고 쉽게 로드를 할수 있게끔 하는 기능(xml기능중 하나)
- spring에서 많이쓰임
- maxFileSize을 너무 작게 잡고 너무 큰 파일을 올리면 서버가 죽어버림! 넉넉하게 세팅하는게 좋다,
업로드 가능 파일 용량은 프론트단에서 검토하고,백단에서 따로 조건문을 지정해주는게 좋다
part :
interface api 자료형(servlet 3.0) => file에만 사용
multipart/form-data 형태로 전송된 POST 요청의 항목 데이터를 다루는 기능들이 정의된 인터페이스.
web 경로
request.getServletContext() : 웹 전체 경로를 설정하는 class
getRealPath() : 웹 디렉토리 경로//첨부파일 환경설정 세팅 @MultipartConfig( fileSizeThreshold = 1024*1024*2, //한개의 파일 전송 크기 - 2MB로 세팅함 maxFileSize = 1024*1024*50,//업로드 가능한 최대 크기 - 50MB로 세팅함(10정도..?적당) maxRequestSize = 1024*1024*100 //여러개의 파일 전체 용량 - 100MB로 세팅함 ) public class fileok extends HttpServlet { private static final long serialVersionUID = 1L; PrintWriter pw = null; protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf8"); response.setContentType("text/html;charset=utf-8"); this.pw = response.getWriter(); //String mfile = request.getParameter("mfile"); //파일첨부기능은 이것만 있으면 안됨, front에서 enctype도 설정해줘야함 Part mfile = request.getPart("mfile"); String filename = mfile.getSubmittedFileName(); //첨부파일명 long filesize = mfile.getSize(); //첨부파일 용량(byte단위로 체크) //2MB제한(위 maxFileSize는 서버 죽지말라고 넉넉하게 세팅,따로 조건문을 지정해주는게 좋다) if(filesize > 2097152) { this.pw.write("<script>" + "alert('첨부파일 용량은 2MB이하만 가능합니다');" + "history.go(-1);" + "</script>"); }else { if(filename != "" && filesize > 0) { //첨부한 파일이 있을 때 //웹 directory에 저장 String url = request.getServletContext().getRealPath(""); mfile.write(url+filename); //해당 웹경로에 파일을 저장시킴 } } this.pw.close(); } }
👀 web경로
⚡ 현재 서버에 저장시 web경로에 저장!
String url = request.getServletContext().getRealPath(""); //or ("/") //D:\servlet\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\web String url = request.getServletContext().getRealPath("/fileupload/"); //D:\servlet\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\web\fileupload
1. 소스파일들이 있는 경로와
실제 웹에서 작동되는 경로는 다르다! (이게 web경로)
2. http://localhost:8080/dog.jpeg 에서 이미지 업로드 확인 가능
폴더에서 확인시에는 타고타고 들어가서 확인 가능
JAVA I/O : socket 통신 형태
WEB I/O : 프로토콜 (http or https) 통신 형태 (라우팅 형태)
=> 프로토콜에는 http,https,ftp,sftp,pop3,imap,ssh....등 이 있다....
둘다 [TCP,UDP]로 나눠지긴 함
👀
100MB : byte단위
100Mb,100mb : bit단위 (환산시 1.5MB밖에 안됨)
'CLASS > SERVLET' 카테고리의 다른 글
#8-1 / 게시판 (0) | 2024.06.21 |
---|---|
#7-3 / 첨부파일 기능 + database 저장 (0) | 2024.06.19 |
#7-1 / 회원 가입 후 로그인,로그아웃 (0) | 2024.06.19 |
#6-3 / storage (0) | 2024.06.18 |
#6-2 / session,cookie - session 입력,출력,삭제 여깃음 (0) | 2024.06.18 |