티스토리 뷰
목차
1. 파일 전송 방식 : io로 처리
2. file upload API : 라이브러리로 처리
3. 자료실의 파일 저장 및 다운로드 구현 : 앞서 만들었던 게시판의 연장선
파일 전송을 위한 FORM 설정
* 파일 자체의 전송 개념이 아니다.
* 이 파일을 읽고, 상대방이 쓰는 개념이기 때문에, 파일 안의 내용이 전송된다는 것이다.
* POST 방식에서 enctype을 multipart/form-data로 설정 : type 속성이 file인 <input> 태그를 통해 파일 선택
▲ [예제1]
파일을 업로드 하기 위해 <form> 태그의 enctype 속성의 값을 multipart/form-data로 설정
파일을 선택하기 위해 type이 file인 <input>태그를 두 개 설정했음
<%@ page contentType="text/html; charset=UTF-8"%>
<html>
<head><title>multipart 폼</title></head>
<body>
<form action="multipart_data.jsp" method="post" enctype="multipart/form-data">
text1 : <input type="text" name="text1" /><br/>
file1 : <input type="file" name="file1" /><br/>
file2 : <input type="file" name="file2" /><br/>
<input type="submit" value="전송" />
</form>
</body>
</html>
파일 선택 폼은 웹 브라우저에 따라 다름
multipart/form-data로 전송된 데이터 형식
▲ [예제2]
실행 화면에서 [전송] 버튼을 클릭하면 multipart/form-data 인코딩을 이용해 텍스트 데이터와 파일 데이터를 [예제2]로 전송
전송 받은 데이터를 그대로 응답 데이터로 출력하여 실제로 어떤 데이터가 전송되는지 확인할 수 있게 만든 예제
<%@ page contentType="text/plain; charset=UTF-8"%>
<%@ page import = "java.io.InputStream" %>
<%@ page import = "java.io.IOException" %>
<%@ page trimDirectiveWhitespaces = "true" %>
<%
InputStream is = null;
out.print("[");
out.print(request.getContentType());
out.print("]");
try{
is = request.getInputStream();
int data = -1;
while((data = is.read()) != -1){
out.print((char)data);
}
} finally{
if(is != null) try{is.close();} catch(IOException ex){}
}
%>
* trimDirectiveWhitespaces : 공백 없앰
* getContentType : 어떤 타입을 요청했는지 출력
결과화면
FileUpload API
프로젝트 > src > WEB-INF > lib에 복붙하기 :
업로드 한 파일 처리 방법
▲ FileItem.write(File file) 메서드를 사용하는 방법
▲ FileItem.getInputStream() 메서드로 구한 입력 스트림으로부터 바이트 데이터를 읽어와서 FileOutputStream을 사용해서 파일에 출력하는 방법
▲ FileItem.get() 메서드로 구한 바이트 배열을 FileOutputStream을 사용해서 파일에 출력하는 방법
<자료실>업로드 한 파일 저장 방식
1) DB의 BLOB에 저장 : 잘 안넣음
2) 파일 시스템에 저장 : 원하는 디렉토리에 업로드 폴더를 만들어 놓고 그 안에서 쓰는 방법이 대부분
<자료실>다운로드의 구현
▲ 다운로드 구현 시 고려 사항
- 응답 컨텐츠 타입 : application/octet-stream
- 헤더 : Content-Disposition 파일명 지정 : 파일명 설정 시, ISO-8859-1로 인코딩 변환해서 설정
▲ 실제 파일 전송
- response.getOutputStream()으로 구한 OutputStream에 파일 데이터 출력하기
'Language > JSP' 카테고리의 다른 글
10월 4일 D+48 [JSP 23장: MVC 패턴 구현] (0) | 2022.10.04 |
---|---|
9월 30일 D+47 [JSP 20장 : Tiles 이용 레이아웃 템플릿] (0) | 2022.09.30 |
9월 22일 D+41 [16장 : JSTL(2) ] (0) | 2022.09.22 |
9월 21일 D+40 [JSP 16장 : JSTL] (0) | 2022.09.21 |
9월 21일 D+40 [JSP 15장 : 표현 언어(Expression Language)] (1) | 2022.09.21 |
- Total
- Today
- Yesterday
- 요소선택
- 순환할당
- 기본 API 클래스
- 자료형
- 리스트연산자
- Date 클래스
- Format 클래스
- 딕셔너리
- IndexError
- Math 클래스
- java.time.package
- StringTokenizer 클래스
- Objects 클래스
- FALSE
- Random 클래스
- 함수
- 포장 클래스
- Arrays 클래스
- 문자열함수
- 리스트
- 파이썬
- StringBuilder 클래스
- 스레드 스케줄링
- 프로그램
- StringBuffer 클래스
- 역반복문
- python
- not_in
- Calendar 클래스
- Pattern 클래스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |