JSP

JSP를 배워보자!!(파일 업로드 하기)

25G 2021. 4. 24. 22:21

안녕하세요 여러분! 벌써 한주가 지나가네요 전역하고 나니 시간이 엄청 빨리 갑니다 ㅜㅜ 벌써 5월이 다돼 가니까요... 전역하면 여친도 생기고 화려한 세상이 펼쳐질 것 같았지만 현실은 개발 공부하고 끝나면 헬스 가는 게 끝이네요 ㅋㅋㅋㅋㅋㅋㅋㅋㅋ 다들 그렇겠죠? 군대는 해롭습니다 ㅋㅋ

잡담은 여기까지 하고 오늘은 JSP를 사용해서 인터넷 페이지에 파일을 업로드 하고 그 업로드한  파일을 확인하는 것까지 한번 달려보겠습니다

 

파일 업로드는 말 그대로 브라우저에서 서버로 파일을 전송하여 서버에 저장하는 것입니다.

전송을 하기 위해선 jsp페이지에 form태그가 필요하고요! 

전송된 파일을 서버에 저장하기 위해 오픈 라이브러리(꽁짜!)를 사용해서 MultipartRequest클래스에 기능들을 통해서 서버에 파일을 보내는 코드를 구현해 볼 것입니다.

일단 오픈 라이브 러리를 다운로드하기 위해서 제가 링크를 공유해 드릴게요

 

http://www.servlets.com/cos/

 

Servlets.com | com.oreilly.servlet

 

www.servlets.com

일단 여기로 들어가면 영어들이 겁나 많아서 당황하실 수도 있겠지만 들어가자마자 스크롤을 내려서

위와 같은 탭이 나올 겁니다 그럼 압축파일을 받아서 풀어 주시고요!

풀린 압축파일에 들어가시면 lib라는 폴더가 있습니다 들어가면 cos.jar라는 파일을 바로 만나보실 수 있습니다

이제 이 cos.jar를 jsp로 들어가서 WEB-INF라는 폴더에 붙여 넣기를 해주시면 간단하게 라이브러리를 추가할 수 있으시고! 여기까지 하셔야 앞으로 나올 클래스의 기능들을 사용하실 수 있습니다!.

MultipartRequest에 대해서 먼저 설명을 해 드리자면

-웹페이지에서 서버로 업로드되는 파일 자체만 다루는 클래스

_웹 브라우저가 전송한 multipart/form-data유형과 POST방식의 요청 파라미터 등을 분석한 후 일반 데이터와 파일 데이터를 구분해서 파일 데이터에 접근해주고 한글 인코딩과 동일한 파일명이 생기면 자동으로 변경까지 해줍니다

대단한 친구네요 ㄷㄷ 만드신 분 격렬히 감사....

이 메서드의 객체에 매개변수를 보시면 request내장 객체는 파일 업로드 처리는 못하니까 MultipartRequest객체로 변환해서 사용하고

saveDricectory로 저장 경로를 설정,

maxPostSize는 업로드 파일의 크기를 제한, encoding은 인코딩 유형을 설정,

policy는 동일 파일명이 있으면 파일명을 변환해 줍니다

중요하니까 꼭 알아두셔야 다음 코드를 이해하실 수 있습니다.

주석을 제외하면 별로 어려운 코드는 하나도 없습니다

15번 줄만 주의 깊게 보시면 될 것 같아요

파일을 업로드할 때 method의 값은 꼭 post로 해주셔야 해요 이유는 get타입은 여러 가지 이유가 있지만 get타입은 보내는 데이터의 크기 제한이 있어서 안됩니다! 꼭 post타입으로 해주시고 enctype의 값 또한 반드시"multipart/form-data"로 해주십시오! 그리고 action에 데이터를 보낼 서버 URL을 설정해주세요! 

process.jsp를 만들어서 서버의 기능을 만들어 볼게요!

자 위 코드를 보겠습니다

8번 줄에 MultipartRequest타입의 multi객체에 new연산자를 사용해서 인스턴스를 선언하는데

매개변수로

1, request(요청 파라미터를 받을 내장 객체),

2. "C://upload"(파일 저장 경로),

3. 파일 제한의 크기,

4. 문자 인코딩 유형,

5. 동일 파일명이 나올 시 이름을 바꿔줄 매개변수 인스턴스

 

이렇게 구성돼있습니다 글을 처음부터 잘 읽어 오신 분은 왜 이렇게 선언됐는지 이해가 되실 겁니다!

그래서 주석에 적어놓은 것처럼 8번이 실행되면서 그 즉시 파일이 업로드가 됩니다

11번 줄에 multi객체를 사용해서 file속성에 있는 요청 파라미터를 받아서 title에 저장하고 있네요

13번에 Enumeration은 컬렉션 프레임워크에 저장된 데이터를 접근하는 데 사용되는 인터페이스입니다. itorater와 거진 똑같다 생각하셔도 될 것 같아요

14번은 filename에 files객체에 들어있는 요청 파라미터를 정수화 해서 filename에 저장하고 있습니다

16번은 filename에 실제 서버에 올라온 파일명을 반환하는 매서드인 getFilesystemName(String타입임)을 사용해서 저장하고 있습니다

17번은 사용자가 실제로 업로드한 파일명을 반환하는 getOriginalFileName(String타입) 을사 용해 객체에 저장합니다

그 밑에 바디 태그에서는 표현 문을 사용해서 출력을 하는 모습입니다

결과를 보시죠!

 

 

파일 선택을 누르면 흔히 보는 첨부파일 창이 떠서 어떻게 사용하는지는 따로 말씀드리지 않겠습니다

여기서 업로드를 누르면?!

이렇게 나오는데,,,,,,,왜,,, 실제 파일 이름에 null값이 뜨는 걸까요... 저는 진짜 모르겠습니다 이것저것 찾아봐도 모르겠습니다.. 잘 아시는 분은 가르쳐 주세요,,,ㅠㅠ,,,,

 

일단 파일은 잘 업로드가 됐는지 확인해야겠죠? 아까 매개변수로 경로를 설정해줬으니까요!

내 제가 좋아하는 고양이 사진이 잘 저장돼있고 같은 파일을 올렸는데도 파일명이 중복되지 않게 작성된 것을 보실 수 있습니다!

참고로 매개변수로 넣은 경로에 그 이름으로 된 저장공간이 없으면 서버 오류가 뜹니다! 참고!

 

하.. 오늘은 라이브러리 설치를 알려드린다고 이것저것 사진을 많이 넣다 보니 스크롤이 작아졌네요 ㅠㅠ 막상 내용은 별거 없는데 그죠 ㅠㅠ

여러분 저는 속상합니다 ㅠㅠ 왜 null값이 뜨는 걸까요? 잘 모르겠습니다... 코린이는 이만... 물러나겠습니다

 

감사합니다