반응형

write.jsp 수정


1. Form 변경

<form name="writeform" method="post" action="write_ok.jsp">

->

<form name="writeform" enctype="multipart/form-data" method="post" action="write_ok.jsp">


2. 파일 추가생성

<tr>

<td>&nbsp;</td>

<td align="center">첨부파일</td>

<td><input type="file" name="file" size=35></td>

<td>&nbsp;</td>

</tr>

<tr height="1" bgcolor="#dddddd"><td colspan="4"></td></tr>


==================================================================================================


write_ok.jsp 수정


1. import 추가

<%@ page import="java.text.*" %>

<%@ page import="java.util.*" %>

<%@ page import="java.io.*" %>

<%@ page import="com.oreilly.servlet.MultipartRequest" %>

<%@ page import="com.oreilly.servlet.multipart.DefaultFileRenamePolicy" %>

<% request.setCharacterEncoding("euc-kr"); %>


2. 수정코드

<%

// File Upload

String fileurl = application.getRealPath("\\");

String saveFolder = "upload";

String encType = "euc-kr";

int maxSize = 5*1024*1024;

ServletContext context = getServletContext();

try{

MultipartRequest multi = new MultipartRequest(request, fileurl, maxSize, encType, new DefaultFileRenamePolicy());

Enumeration files = multi.getFileNames();

String fileName = "";

String element = (String)files.nextElement();

fileName = (String)multi.getFilesystemName(element);

request.setCharacterEncoding("euc-kr");

String dbUrl = "jdbc:mysql://localhost:3306/board";

Class.forName("com.mysql.jdbc.Driver");

String name = multi.getParameter("name"); // write.jsp에서 name에 입력한 데이터값

String password = multi.getParameter("password");

String title = multi.getParameter("title");

String memo = multi.getParameter("memo");

int max = 0;

try {

Connection conn = DriverManager.getConnection(dbUrl, "root","1234");

Statement stmt = conn.createStatement();

String SQL = "SELECT MAX(ID) FROM BOARD";

ResultSet rs = stmt.executeQuery(SQL);

if(rs.next()){

max = rs.getInt(1);

}

File file = multi.getFile(element);

if(fileName != null && file != null){

String original = multi.getOriginalFileName(element);

String type = multi.getContentType(element);


SQL = "INSERT INTO board(`username`, `password`,`title`, `memo`, `hit`, `ref`, `indent`, `step`, `filename`, `filesize`) VALUES('"+name+"','"+password+"','"+title+"','"+memo+"','0','"+(max+1)+"','0','0','"+fileName+"', '"+file.length()+"') ";

} else {

SQL = "INSERT INTO board(`username`, `password`,`title`, `memo`, `hit`, `ref`, `indent`, `step`) VALUES('"+name+"','"+password+"','"+title+"','"+memo+"','0','"+(max+1)+"','0','0') ";

}

int cnt = stmt.executeUpdate(SQL);

if(cnt > 0) {

if(fileName != null && file != null){

out.println("글 + 파일 업로드가 성공적으로 입력되었습니다.");

} else {

out.println("글 작성이 성공적으로 입력되었습니다.");

}

} else {

out.println("<BR>" + SQL + "<BR>");

out.println("글 작성도중 실패하였습니다.");

}

stmt.close();

conn.close();


} catch(SQLException e){

out.println(e.toString());

}

} catch(Exception ioe) {

out.println(ioe);

}

%>

반응형

'JSP > 자료실' 카테고리의 다른 글

MultipartRequest 테스트  (0) 2014.02.17
자료실 계획  (0) 2014.02.17
반응형
<!--
    1. 전송하고자 하는 입력 폼을 <form>과 </form>사이에 위치해놓는다.
    2. action 값을 데이터를 전송받아서 처리할 곳으로 설정한다.
    3. method를 반드시 post로 설정해준다.
    4. enctype을 multipart/form-data로 설정한다.
    5. <form>과 </form>사이에 input type submit버튼을 위치시킨다.
 -->
 
<form action="<%=request.getContextPath() %>/test/test.do" method="post" enctype="multipart/form-data">
 
    <회원가입 양식><br>
    이름: <input type="text" name="m_name"><br>
    별명: <input type="text" name="m_nickname"><br>
    사진: <input type="file" name="m_file"><br><br>
     
    <input type="submit" value="전송~">
 
</form>


* Java Code

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
// 파일이 저장될 서버의 경로. 되도록이면 getRealPath를 이용하자.
// String savePath = "D:/Projects/workspace/projectName/WebContent/folderName";
String savePath = request.getServletContext().getRealPath("folderName");
 
// 파일 크기 15MB로 제한
int sizeLimit = 1024*1024*15;
 
//  ↓ request 객체,               ↓ 저장될 서버 경로,       ↓ 파일 최대 크기,    ↓ 인코딩 방식,       ↓ 같은 이름의 파일명 방지 처리
// (HttpServletRequest request, String saveDirectory, int maxPostSize, String encoding, FileRenamePolicy policy)
// 아래와 같이 MultipartRequest를 생성만 해주면 파일이 업로드 된다.(파일 자체의 업로드 완료)
MultipartRequest multi = new MultipartRequest(request, savePath, sizeLimit, "utf-8"new DefaultFileRenamePolicy());
 
 
// --------------------------아래는 전송 받은 데이터들을 DB테이블에 저장시키기 위한 작업들이다.--------------------------
// 테이블 설계, 쿼리문, DTO, DAO, Service.. 등은 만들어져 있다고 가정한다.
 
 
 
// MultipartRequest로 전송받은 데이터를 불러온다.
// enctype을 "multipart/form-data"로 선언하고 submit한 데이터들은 request객체가 아닌 MultipartRequest객체로 불러와야 한다.
String m_name = multi.getParameter("m_name");
String m_nickname = multi.getParameter("m_nickname");
 
// 전송받은 데이터가 파일일 경우 getFilesystemName()으로 파일 이름을 받아올 수 있다.
String fileName = multi.getFilesystemName("m_file");
 
// 업로드한 파일의 전체 경로를 DB에 저장하기 위함
String m_fileFullPath = savePath + "/" + fileName;
 
 
// 데이터들을 담을 그릇인 DTO(혹은 Bean) 객체를 생성 후, 데이터들을 set해준다.
MemberDTO memberDTO = new MemberDTO();
 
memberDTO.setM_name(m_name);
memberDTO.setM_nickname(m_nickname);
memberDTO.setM_fileFullPath(m_fileFullPath);
memberDTO.setM_fileName(fileName);
 
// Service 객체 생성.(서비스가 없고 DAO에서 직접 처리한다면 DAO 객체 생성)
MemberService service = MemberService.getInstance();
 
// 서비스에서 만들어놓은 insert 수행 메서드 사용. set으로 담아줬던 DTO를 넘겨서 insert 수행.
service.insertMember(memberDTO);
 
// 검증 처리는 생략했다.
// 검증은 Controller 혹은 Action에서 해도 되고, 입력 폼이 있는 jsp에서 해도 된다. 둘다 해도 되고..
// 그런 건 각자 알아서.
 
// 만약 return할 페이지에 방금 전송한 데이터들을 출력하고 싶다면 DTO를 속성에 담아준다.
request.setAttribute("memberDTO", memberDTO);
 
// ↓ 모든 것이 성공적으로 수행되었을 경우 return 될 page
return "blabla/blabla.jsp";


반응형

'JSP > 자료실' 카테고리의 다른 글

글쓰기 수정  (0) 2014.02.18
자료실 계획  (0) 2014.02.17
반응형

게시판에 자료를 올려놓고 다운 받을 수 있는 자료실을 만들어본다.


게시판에 자료를 업로드하고 다운로드 할 수 있는 기능을 추가하는 형태로 만들 것이다.


MultipartRequest를 이용하여 파일 업로드 작업을 할 것이다.


MultipartRequest

- 파일을 서버에 업로드하고 데이터베이스에 데이터를 업로드하며 업로드된 파일을 제어하고 파일과 Form의 필드들을 함께 제어한다.

- 파일을 다운로드하고 파일의 크기나 파일의 형식을 제한 할 수 있으며 Apach, NT, Unit, Linux IIS 어떤 플랫폼에서도 사용 가능하다.


http://www.servlets.com에 접속 > 왼쪽 메뉴에서 com.oreilly.servlet 링크를 클릭하여 다운받는다.


다운받은 파일에 압축을 풀고, lib> cons.jsr파일을 WEB-INF>lib에 붙어넣는다.

반응형

'JSP > 자료실' 카테고리의 다른 글

글쓰기 수정  (0) 2014.02.18
MultipartRequest 테스트  (0) 2014.02.17

+ Recent posts