파일업로드 라이브러리
cos.jar : oreilly사에서 제작한 javaEE기반의 업로드 컴포넌트
apache fileupload : 아파치 재단 프로젝트
어플리케이션의 정보를 가진 객체
ServletConext : 해당 servlet이 실행되고 있는 어플리케이션
ServletConfig : 서블릿이 초기화될때 호출되는 init()으로 넘겨받는 매개변수
- 이 객체를 이용하여 서블릿이 서블릿으로써 업무처리시 알아야할 각종 정보들을 넘겨받을 수 있다
Apache fileupload 사용법
step 1
- 파일을 서버에 전송 시 바이너리 로 전송해야한다
step 2
<RegistServlet.java>
- path = context.getRealPath("/data");로 내부톰캣의 data 폴더의 경로를 구한다.
- request.getParameter 로는 바이너리를 받아올 수 없기 떄문에 업로드 관련설정인 DiskFileItemFactory 객체와 업로드 처리객체인 ServletFileUpload를 이용하여 upload.parseRequest(request);로 파라미터를 가져온다.
- 그리고 text와 file을 isFormField()로 구분하여 vo에 넣어준다
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
|
package site0617.photo;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import site0617.model.domain.Gallery;
import site0617.model.gallery.dao.GalleryDAO;
import site0617.util.FileManager;
//아파치 업로드 컴포넌트를 이용한 파일업로드 구현
public class RegistServlet extends HttpServlet{
ServletContext context;
String path;
int maxSize=2*1024*1024; //2M byte
GalleryDAO galleryDAO;
@Override
public void init(ServletConfig config) throws ServletException {
context = config.getServletContext();
path = context.getRealPath("/data");
galleryDAO = new GalleryDAO();
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//jsp에서의 page지시영역의 conentType과 동일
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
out.print("저 실행성공이요~!");
//아파치 파일 업로드를 이용한 파일업로드 처리~~
//업로드 관련설정 DiskFileItemFactory 이용
File saveDir=new File(path); //저장될 디렉토리
DiskFileItemFactory factory=new DiskFileItemFactory();
factory.setRepository(saveDir);//어느경로에 저장
factory.setSizeThreshold(maxSize);//저장용량 제한
//업로드 처리 객체
ServletFileUpload upload=new ServletFileUpload(factory);//설정 정보 적용하여 인스턴스 생성
request.setCharacterEncoding("utf-8"); //파라미터에 대한 인코딩(한글 안깨지게)
Gallery gallery=new Gallery();
try {
List<FileItem> itemList=upload.parseRequest(request);
out.print("넘겨받은 컴포넌트 값의 수는 "+itemList.size()+"<br>");
for( FileItem item : itemList) {
if(item.isFormField()) { //inpuyt type='text' 박스라면...
out.print(item.getFieldName()+"필드의 값은 "+item.getString("utf-8")+"<br>");
String value = item.getString("utf-8");
if(item.getFieldName().equals("title")) {//제목
gallery.setTitle(value);
}else if(item.getFieldName().equals("writer")) {//작성자
gallery.setWriter(value);
}else if(item.getFieldName().equals("content")) {//내용
gallery.setContent(value);
}
}else { //아니라면, 얘는 input type='file'
long time=System.currentTimeMillis();
String newName=item.getName(); //업로드된 파일명 반환
out.print("업로드한 파일명은 "+newName);
String ext=FileManager.getExt(newName);//확장자 구하기
item.write(new File(path+"/"+time+"."+ext)); //서버에 저장!!!
gallery.setFilename(time+"."+ext);
}
//반복문이 종료되면, VO에 알맞는 데이터가 채워져 있다!!
//이 시점에 VO를 이용하여 insert 수행!!
int result = galleryDAO.insert(gallery);
out.print("<script>");
if(result==0) {
out.print("alert('등록실패');");
out.print("history.back();");
}else {
out.print("alert('등록성공');");
out.print("location.href='/photo/list.jsp';");
}
out.print("</script>");
}
} catch (FileUploadException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}
|
cs |
반응형
'개발 > jsp' 카테고리의 다른 글
jsp Google Map api 사용 (0) | 2021.06.28 |
---|---|
jsp javaBean (0) | 2021.06.28 |
jsp 댓글 게시판(MyBatis / Ajax / Maven / Lombok) & 세션관리 (0) | 2021.06.25 |
jsp Singleton(DAO / Connection Pool) (0) | 2021.06.17 |
jsp Servlet / Tomcat / JNDI (0) | 2021.06.17 |
댓글