파일 업로드 하기3 - Function

Published on: 2009. 3. 31. 17:38 by louis.dev

<!-- FileUpload Function -->
참조:: http://javastore.tistory.com/entry/파일-업로드-하기


void fileUpload (HttpServletRequest request, String realPath, Map<String, String> parameters, 
                      Map<String, UploadFile> uploadFiles) throws FileUploadException, UnsupportedEncodingException {
 boolean isMultipart = ServletFileUpload.isMultipartContent(request);

 if( isMultipart ) {
  File temporaryDir = new File("c:\\tmp\\");
  
  DiskFileItemFactory factory = new DiskFileItemFactory();
  factory.setSizeThreshold(0);
  factory.setRepository(temporaryDir);
 
  ServletFileUpload upload = new ServletFileUpload(factory);
  upload.setSizeMax(10 * 1024 * 1024);
  List<FileItem> items = upload.parseRequest(request);
  
  Iterator iter = items.iterator();
  while (iter.hasNext()) {
   FileItem fileItem = (FileItem) iter.next();
 
   if (fileItem.isFormField()) {
    parameters.put(fileItem.getFieldName(), fileItem.getString("euc-kr"));
    //out.println("폼 파라미터 : " + fileItem.getFieldName() + "=" + fileItem.getString("euc-kr") + "<br/>");
   } else {
   if( fileItem.getSize() > 0 ) {
    UploadFile uf = new UploadFile();
 
    String fieldName = fileItem.getFieldName();
 
    int idx = fileItem.getName().lastIndexOf("\\");
    if( idx == -1 ) {
     idx = fileItem.getName().lastIndexOf("/");
    }
    String fileName = fileItem.getName().substring(idx + 1);
 
    
    String contentType = fileItem.getContentType();
    boolean isInMemory = fileItem.isInMemory();
    long sizeInBytes = fileItem.getSize();
 
    uf.setFileName(fileName);
    uf.setTempName(fileName);
    uf.setContentType(contentType);
    uf.setFileSize(sizeInBytes);
    
    uploadFiles.put(fileItem.getFieldName(), uf);
    
    
    try {
     File uploadedFile = new File(realPath, fileName);
     fileItem.write(uploadedFile);
     //fileItem.delete();
    } catch(Exception ex) {}
   }
   }
  }
 } else {
  out.println("인코딩 타입이 multipart/form-data 가 아님.");
 }
}

=========================================================================================================
<!-- 실제 사용할때 -->

String realPath = config.getServletContext().getRealPath("/upload/");
Map<String, String> parameters = new HashMap<String, String>();
Map<String, UploadFile> uploadFiles = new HashMap<String, UploadFile>();

 fileUpload(request, realPath, parameters, uploadFiles);
 

 UploadFile uf1=uploadFiles.get("file1");                                    //write_form.jsp 의 input name='file1'
 UploadFile uf2=uploadFiles.get("file2");
 UploadFile uf3=uploadFiles.get("file3");

 String title = parameters.get( "title" );                                        //post형식으로 보내면 getParameter로 받는것이 아니라
 String contents = parameters.get( "contents" );                         //Map<String, String> parameters = new HashMap<String, String>();
 String userId=(String)session.getAttribute("userId");                  //parameters.get으로 한다.

======================================================================================================
write_form.jsp

<form name='writeFrm' action='write.jsp' method='post'  enctype='multipart/form-data'>
       <table width="690" border="1" cellpadding="10" cellspacing="0" style="border:solid 1px #d6d7d6;">
           
            <tr>
              <td align="left">제목</td>
              <td align="left"><input name="title" type="text" value="" size="40" /></td>
            </tr>
            <tr>
             <td>내용</td>
             <td><textarea name='contents' cols='70' rows='10'></textarea></td>
            </tr>
            <tr>
                <td colspan="2">
                 파일1: <input type="file" name="file1" size='50'/><br>
                 파일2: <input type="file" name="file2" size='50'/><br>
                  파일3: <input type="file" name="file3" size='50'/><br>
                 </td>
            </tr>
            <tr>
               <td colspan="2" align="right">
                 <img src="/images/button_save.gif" width="67" height="30" style="cursor:hand;" onclick="javascript:checkUserRegist();" />
            </tr>
           
         </table>
      </form>

파일 업로드 하기1 - 기본 개념

Published on: 2009. 3. 31. 12:39 by louis.dev

-파일을 업로드 하려면 파일하나를 여러 파트로 나눠서(멀티파트) "POST" 방식으로 업로드 시킨다.
#주의사항
1.임시폴더(c://tmp)는 직접 만든다.
2.이클립스에서 webcontents 폴더 밑에 upload라는 폴더를 직접 생성해야 한다.
3.library파일을 2개 추가 해야한다.
    -commons-fileupload-1.2.1.jar
    -commons-io-1.4.jar

http://commons.apache.org/downloads/download_fileupload.cgi

http://commons.apache.org/downloads/download_io.cgi



<!--기본적인 FILE UPLOAD HTML FORM-->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<form action="upload.jsp" method="post" enctype="multipart/form-data">     //파일전송일 때는 항상 METHOD는 POST로 하고 ENCTYPE을
                                                                                                          //항상 주 어야 함
파일1: <input type="file" name="file1"/><br>                                             //TYPE은 FILE로 주어야 함!!
파일2: <input type="file" name="file2"/><br>
파일3: <input type="file" name="file3"/><br>
파라미터1: <input type="text" name="param1"/><br>
파라미터2: <input type="text" name="param2"/><br>
파라미터3: <input type="text" name="param3"/><br>
<input type="submit" value="전송" />
</form>
</body>
</html>

<!--실제적인 데이터를 전달받기 위한 JSP 파일-->

-www.apach.org-> commons ->io,FileUpload 라이브러리를 다운 받아야 한다.

<%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<%@ page import="org.apache.commons.fileupload.servlet.ServletFileUpload"%>
<%@ page import="java.io.File"%>
<%@ page import="org.apache.commons.fileupload.disk.DiskFileItemFactory"%>
<%@ page import="java.util.List"%>
<%@ page import="org.apache.commons.fileupload.FileItem"%>
<%@ page import="java.util.Iterator"%>
<%@ page import="java.io.IOException"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<%
 boolean isMultipart = ServletFileUpload.isMultipartContent(request);                   // multipart로 전송되었는가를 체크

 if (isMultipart) {                                                                                            // multipart로 전송 되었을 경우
  File temporaryDir = new File("c:\\tmp\\");                                                 //업로드 된 파일의 임시 저장 폴더를 설정
  String realDir = config.getServletContext().getRealPath("/upload/");                  //톰켓의 전체 경로를 가져오고 upload라는 폴더를 만들고 거기다
                                                                                                                  //tmp의 폴더의 전송된 파일을 upload 폴더로 카피 한다
.

  DiskFileItemFactory factory = new DiskFileItemFactory();                                   
  factory.setSizeThreshold(1 * 1024 * 1024);                                                      //1메가가 넘지 않으면 메모리에서 바로 사용
  factory.setRepository(temporaryDir);                                                               //1메가 이상이면 temporaryDir 경로 폴더로 이동
                   //실제 구현단계 아님 설정단계였음

  ServletFileUpload upload = new ServletFileUpload(factory);                              
  upload.setSizeMax(10 * 1024 * 1024);                                                             //최대 파일 크기(10M)
  List<FileItem> items = upload.parseRequest(request);                                      //실제 업로드 부분(이부분에서 파일이 생성된다)
  
  Iterator iter=items.iterator();                                                                            //Iterator 사용
  while(iter.hasNext()){
   FileItem fileItem = (FileItem) iter.next();                                                            //파일을 가져온다
   
   if(fileItem.isFormField()){                                                                               //업로드도니 파일이 text형태인지 다른 형태인지 체크
                                                                                                                    // text형태면 if문에 걸림
    out.println("폼 파라미터: "+ fileItem.getFieldName()+"="+fileItem.getString("euc-kr")+"<br>");
   }else{                                                                                                         //파일이면 이부분의 루틴을 탄다
    if(fileItem.getSize()>0){                                                                                 //파일이 업로드 되었나 안되었나 체크 size>0이면 업로드 성공
     String fieldName=fileItem.getFieldName();
     String fileName=fileItem.getName();
     String contentType=fileItem.getContentType();
     boolean isInMemory=fileItem.isInMemory();
     long sizeInBytes=fileItem.getSize();
     out.println("파일 [fieldName] : "+ fieldName +"<br/>");
     out.println("파일 [fileName] : "+ fileName +"<br/>");
     out.println("파일 [contentType] : "+ contentType +"<br/>");
     out.println("파일 [isInMemory] : "+ isInMemory +"<br/>");
     out.println("파일 [sizeInBytes] : "+ sizeInBytes +"<br/>");
     
     try{
      File uploadedFile=new File(realDir,fileName);                                                   //실제 디렉토리에 fileName으로 카피 된다.
      fileItem.write(uploadedFile);
      fileItem.delete();                                                                                            //카피 완료후 temp폴더의 temp파일을 제거
     }catch(IOException ex) {} 
    }
   }
  }
 }else{
  out.println("인코딩 타입이 multipart/form-data 가 아님.");
 }
%>
</body>
</html>

JavaScript JavaScript수행후 완료 되면 다른 페이지로 이동하게 하는 방법

Published on: 2009. 3. 31. 03:10 by louis.dev

location.href 를 사용하면 된다.

:::::사용예::::::
function checkSuccess(){
 if(document.hiddenForm.hiddenItem.value==0){
  alert("자신의 글만 삭제할수 있습니다.");
  location.href="list.jsp";                               //alert문을 실행해서 팝업창을 띄운다음에 list.jsp로 이동한다.
 }
 if(document.hiddenForm.hiddenItem.value==1)
 {
  alert("글이 정상적으로 삭제 되었습니다.");
  location.href="list.jsp";
 }
}

JavaScript JavaScript에서 submit() function 사용하기

Published on: 2009. 3. 31. 03:07 by louis.dev

1.submit()을 사용하면 이름을 정해준 form의 action에 설정되어있는 곳으로 submit을 할수 있다.
:::::사용 예:::::
function checkUserRegist(){
 if(document.writeFrm.title.value=="" || document.writeFrm.title.value==null){
  alert("제목을 입력하세요");
  document.writeFrm.title.focus();
 }else if(document.writeFrm.contents.value=="" || document.writeFrm.contents.value==null){
  alert("내용을 입력하세요");
  document.writeFrm.contents.focus();
 }else{
  document.writeFrm.submit();                      //form name 이 writeFrm이라고 된 form의 action을 실행한다.
  
 }
}

JDBC-PrepareStatement 사용하기(Statement 대신)

Published on: 2009. 3. 31. 02:59 by louis.dev


JDBC-PrepareStatement 사용하기(Statement 대신)

Statement로 사용시 query 문을 String형식으로 해야 하기 때문에 , 또는 ' 때문에 에러가 나는 경우가 많다.
이러한 불편을 제거하기 위해 PrepareStatement를 사용한다.

<!-- 사용방법-->
//DB_Connection method
Connection DB_Connection() throws ClassNotFoundException, SQLException, Exception
 {
  String url = "jdbc:oracle:thin:@127.0.0.1:1521:XE";
  Class.forName( "oracle.jdbc.driver.OracleDriver" );
  Connection conn = DriverManager.getConnection( url, "scott", "tiger" );
  return conn;
 }


Connection conn = null;
PreparedStatement pstmt=null;                  //PrepareStatement를 사용하기 위해 Statement 대신 정의
ResultSet rs = null;
 

 try {
  conn = DB_Connection();
  conn.setAutoCommit(false);                   //autoCommit을 false로 설정

  
  pstmt=conn.prepareStatement("insert into TB_MEMBER_BOARD
                                             (SEQ,USER_ID,TITLE,REGIST_DATE,CONTENTS,READ_COUNT)
                                             values (?,?,?,sysdate,?,0)");              //다음과 같이 변수가 들어갈 곳은 ? 로 대신하고
                                                                                                  //PrepareStatement의 setInt,setString method를 사용하여 index로 물음
                                                                                                  //표에 접근할수 있다.(물론 set 순서가 뒤바뀌어도 상관없다) 
  pstmt.setInt(1,seq); 
  pstmt.setString(2,userId);
  pstmt.setString(3,title);
  pstmt.setString(4,contents);

  pstmt.executeUpdate();
     conn.commit();
     conn.setAutoCommit(true);  //트랜잭션 종료
 } catch( Exception e ) {
        conn.rollback();                               //에러발생할 경우 롤백 및 트랜잭션 종료
        conn.setAutoCommit(true);
  out.println( e.toString() );
 } finally {
     try { if( rs    != null ) rs.close();    } catch ( Exception e ) {}
     try { if( stmt  != null ) stmt.close();  } catch ( Exception e ) {}
     try { if( conn  != null ) conn.close();  } catch ( Exception e ) {}
 }

'Web > JDBC' 카테고리의 다른 글

JDBC 기본설정 순서  (0) 2009.03.31