Cute Apple
본문 바로가기
개발/jsp

jsp 파일업로드 (oreilly / apache)

by 미댕댕 2021. 6. 23.

파일업로드 라이브러리

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

댓글