여행을 개발하다
사용자로부터 파일 업로드 받기 본문
안녕하세요!!
오늘은 JSP로 파일을 업로드 하는 법에 대해 알아보겠습니다.
모두 웹 상에서 한 번 쯤은 파일을 업로드 해보셨을텐데요.
사용자가 파일을 첨부할 수 있도록 하기 위해서는 어떻게 코딩을 해야 하는지,
차근차근 알아보도록 하겠습니다.
1. 사전 준비 작업 - cos.jar 라이브러리에 추가
파일 업로드를 위해서는 cos.jar이라는 파일을 라이브러리에 추가해야 합니다.
다운로드 링크는 여기에 있어요!
홈페이지에 접속 후, 스크롤을 내리시면 Download 메뉴가 있는데요.
이 압축 파일을 다운로드 받으시고, 압축을 해제해주세요.
그럼 lib 폴더 안에 cos.jar이라는 파일이 있을꺼에요.
이 파일을 jsp 프로젝트의 WEB-INF->lib 폴더에 넣어주시면 됩니다.
2. 파일을 업로드 받을 JSP 파일 - fileUploadOK.jsp
먼저, 파일을 업로드 받을 'fileUploadForm'이라는 JSP 파일을 하나 만들겠습니다.
그리고 사용자로부터 입력 받은 파일은 'fileUploadOK.jsp'라는 별도의 파일로 보내어,
추가로 필요한 작업을 마저 처리하도록 하겠습니다.
간단히 form 태그를 이용하죠.
Method는 get이 아닌 post 방식을 사용하겠습니다.
그리고 추가적으로 코딩해줘야 할 속성은 'enctype'이라는 속성인데요.
enctype 속성은 입력받은 데이터를 어떻게 처리할지 정해주는 속성이라고 생각하시면 됩니다.
하지만, 파일은 소용량일 때도 있고, 대용량일 때도 있겠죠?
일반적으로 파일의 용량이 클 경우에는 '패킷' 단위로 데이터를 나누어 보냅니다.
이렇게 패킷 단위로 파일을 첨부할 것을 감안하여, 기본값인 "application/x-www-form-urlencoded" 대신 "multipart/form-data"로 속성 값을 대체해주세요.
(자동 완성 기능의 꽃인 Eclipse에서 아쉽게도 'multipart/form-data'을 지원하지 않습니다.. 휴...)
그리고 <input> 태그의 "file"이라는 속성을 채워, 'fileUploadOK.jsp'로 넘겨주도록 하죠.
이름도 간단히 'file'이라고 해주겠습니다.
그리고 '파일 전송' 버튼을 눌러 파일을 전송하겠습니다.
3. 후속 처리를 맡은 jsp파일 - fileUploadOK.jsp
그 다음으로 후속 처리를 맡은 jsp파일인 'fileUploadOK.jsp'를 만들어줍니다.
그리고 스크립트릿을 사용하여 내용을 받아주도록 하죠.
fileUploadOK.jsp에서는 enctype 속성이 'multipart/form-data'로 설정된 폼을 코딩했습니다. 이럴 경우, 일반적인 request가 아닌 multipart를 지원하는 객체로 받아야 합니다.
multipart를 지원하는 클래스의 이름은 'MultipartRequest'입니다.
이제 mr이라는 이름을 가진 MultipartRequest 객체를 하나 만들도록 할께요. 그런데 객체를 선언하자 빨간줄이 나왔버렸어요. 인수가 없기 때문입니다.
여기서 'MultipartRequest'의 객체 mr은 무려 5개의 매개 변수를 필요로 합니다. 매개 변수의 순서는 다음과 같아요.
"
1. 요청 객체
'fileUploadForm.jsp'을 통해 첨부된 파일을 가져와야 하므로, request 영역으로 명시해줍니다.
2. 업로드 되는 파일이 저장될 실제 경로
이는 WebContent 폴더에 upload라는 폴더를 새로 만들어 사용하겠습니다.
동일한 폴더에 형성하였으므로 경로는 "/upload"로 하면 되겠네요!
3. 업로드 되는 파일의 크기(바이트 단위로 입력)
제한할 파일 크기를 바이트 단위로 입력하면 됩니다.
저는 5MB로 하겠습니다.
하지만 계산은 힘드니, 자바가 대신 해주는걸로...
5 * 1024 * 1024!
4. 인코딩 방식.
한글로 표현할 것이므로 고민없이 "UTF-8"!
5. 같은 이름이 존재할 경우 이름을 자동으로 변경시키는 객체.
위와 같은 기능을 하는 클래스의 이름은 'DefaultFileRenamePolicy'입니다.
이 클래스의 객체를 새로 생성해서 인수로 넣어주겠습니다.
'new DefaultFileRenamePolicy()'
"
한 줄에 다 쓰려니 힘이드네요. 가독성을 위해 줄을 나누어주겠습니다.
3. 업로드 된 파일 확인하기
이제 파일을 업로드 해보고, 그것이 제대로 작동하는지 한 번 확인해보겠습니다.
임의로 '안녕하세요.txt' 파일을 하나 만들어 바탕화면에 저장하겠습니다.
그리고 JSP를 실행시키면, 다음과 같이 화면이 하나 떠요!
여기서 파일 선택 버튼을 누른 후, 방금 생성한 '안녕하세요.txt' 파일을 첨부해주세요.
파일 첨부가 완료되면, 파일 선택 버튼 옆에 첨부한 파일 이름이 나타납니다.
그리고 파일 전송 버튼을 클릭!
그러면 업로드 된 파일을 한 번 확인해볼까요?
파일의 경로는 "C → Users → Administrator → JSP workspace 위치 → .metadata → .plugins → org.eclipse.wst.server.core → tmp0 → wtpwebapps → 프로젝트 명 → upload" 입니다. 너무나도 복잡하죠...ㅎㅎ
어렵사리 들어간 폴더에 다음과 같이 업로드 한 파일이 나타납니다.
지금까지 JSP에서 사용자로부터 어떻게 파일을 업로드 받는지에 대해 알아보았습니다.
감사합니다!!: )