안효원 안효원 2021-09-01
file upload & download complite
@1aff9320082c7d75e80219c0f3ad66b2b07828ce
.classpath
--- .classpath
+++ .classpath
@@ -2,6 +2,7 @@
 <classpath>
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
 		<attributes>
+			<attribute name="module" value="true"/>
 			<attribute name="maven.pomderived" value="true"/>
 		</attributes>
 	</classpathentry>
@@ -18,9 +19,9 @@
 	</classpathentry>
 	<classpathentry kind="src" output="target/test-classes" path="src/test/java">
 		<attributes>
+			<attribute name="test" value="true"/>
 			<attribute name="optional" value="true"/>
 			<attribute name="maven.pomderived" value="true"/>
-			<attribute name="test" value="true"/>
 		</attributes>
 	</classpathentry>
 	<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
@@ -29,5 +30,6 @@
 			<attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>
 		</attributes>
 	</classpathentry>
+	<classpathentry kind="lib" path="C:/dev/cos-20.08/lib/cos.jar"/>
 	<classpathentry kind="output" path="target/classes"/>
 </classpath>
.settings/org.eclipse.wst.common.component
--- .settings/org.eclipse.wst.common.component
+++ .settings/org.eclipse.wst.common.component
@@ -1,9 +1,18 @@
 <?xml version="1.0" encoding="UTF-8"?><project-modules id="moduleCoreId" project-version="1.5.0">
+        
     <wb-module deploy-name="WebTest-0.0.1-SNAPSHOT">
+                
         <wb-resource deploy-path="/" source-path="/target/m2e-wtp/web-resources"/>
+                
         <wb-resource deploy-path="/" source-path="/src/main/webapp" tag="defaultRootSource"/>
+                
         <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/java"/>
+        <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/test/java"/>
+                
         <property name="java-output-path" value="/JSP_Board/build/classes"/>
+                
         <property name="context-root" value="WebTest"/>
+            
     </wb-module>
+    
 </project-modules>
 
src/main/java/config/FileDownloadHelper.java (added)
+++ src/main/java/config/FileDownloadHelper.java
@@ -0,0 +1,28 @@
+package config;
+
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+
+public class FileDownloadHelper {
+
+	public static void copy(String filePath, OutputStream os) throws IOException{
+		FileInputStream is = null;
+		try {
+			is = new FileInputStream(filePath);
+			byte[] data = new byte[8096];
+			int len = -1;
+			while((len = is.read(data)) != -1) {
+				os.write(data, 0, len);
+			}
+		}finally {
+			if(is != null) {
+				try {
+					is.close();
+				}catch (Exception e) {
+				}
+			}
+		}
+	}
+	
+}
src/main/java/control/MemberServlet.java
--- src/main/java/control/MemberServlet.java
+++ src/main/java/control/MemberServlet.java
@@ -1,7 +1,11 @@
 package control;
 
 import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
 import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
 import java.io.PrintWriter;
 import java.text.SimpleDateFormat;
 import java.util.Calendar;
@@ -10,6 +14,7 @@
 import java.util.List;
 import java.util.Map;
 import javax.servlet.RequestDispatcher;
+import javax.servlet.ServletContext;
 import javax.servlet.ServletException;
 import javax.servlet.annotation.WebServlet;
 import javax.servlet.http.HttpServlet;
@@ -18,6 +23,9 @@
 import model.MemberDAO;
 import model.MemberDTO;
 import model.ReplyDTO;
+import com.oreilly.servlet.*;
+//import com.oreilly.servlet.MultipartRequest;
+import com.oreilly.servlet.multipart.DefaultFileRenamePolicy;
 
 /**
  * Servlet implementation class MemberServlet
@@ -102,14 +110,29 @@
 			request.setCharacterEncoding("UTF-8");
 			response.setCharacterEncoding("UTF-8");
 			response.setContentType("text/html; charset=utf-8");
-
-			String writer = request.getParameter("inputWriter");
+			
+/**************************파일 업로드*****************************/
+			
+			String savePath = "upload";
+			int uploadFileSizeLimit = 5 * 1024 * 1024;
+			String encType = "UTF-8";
+			
+			ServletContext context = getServletContext();
+			String uploadFilePath = context.getRealPath(savePath);
+			System.out.println("서버상의 실제 디렉토리");
+			System.out.println(uploadFilePath);
+			
+			MultipartRequest multi = new MultipartRequest(request, uploadFilePath, uploadFileSizeLimit, encType, new DefaultFileRenamePolicy());
+			String fileName = multi.getFilesystemName("file");
+			
+/*************************************************************************/
+			String writer = multi.getParameter("inputWriter");
 			if (writer.equals("")) {
 				writer = "Anonymous";
 			}
 
-			String title = request.getParameter("inputTitle");
-			String contents = request.getParameter("inputContents");
+			String title = multi.getParameter("inputTitle");
+			String contents = multi.getParameter("inputContents");
 			Date date = new Date();
 			SimpleDateFormat simpleDate = new SimpleDateFormat("yyyy-MM-dd");
 			String strdate = simpleDate.format(date);
@@ -123,7 +146,7 @@
 			int view = 1;
 
 			boolean result = false;
-			result = dao.setInsert(writer, title, contents, view, inputDate);
+			result = dao.setInsert(writer, title, contents, view, inputDate, fileName);
 
 			if (result) {
 				out.println("<script>alert('등록 완료')</script>");
@@ -179,9 +202,70 @@
 			out.println("<script>location.href='list.do'</script>");
 		} else if (url.indexOf("download.do") != -1) {
 
-			System.out.print("다운로드.두 로 옴");
-			String filePath = request.getRealPath("/download");
-			File file = new File(String.valueOf(filePath) + "/" + request.getParameter("file"));
+			String file1 = request.getParameter("file");
+			
+			request.setCharacterEncoding("UTF-8");  
+		    // 파일 업로드된 경로
+		    String root = request.getSession().getServletContext().getRealPath("/");
+		    String savePath = root + "upload";
+		    // 서버에 실제 저장된 파일명
+		    String filename = file1;    
+		    // 실제 내보낼 파일명
+		    String orgfilename = file1;      
+		 
+		    InputStream in = null;
+		    OutputStream os = null;
+		    File file = null;
+		    boolean skip = false;
+		    String client = ""; 
+		 
+		    try{ 
+		        // 파일을 읽어 스트림에 담기
+		        try{
+		            file = new File(savePath, filename);
+		            in = new FileInputStream(file);
+		        }catch(FileNotFoundException fe){
+		            skip = true;
+		        }
+		         
+		        client = request.getHeader("User-Agent");
+		        // 파일 다운로드 헤더 지정
+		        response.reset() ;
+		        response.setContentType("application/octet-stream");
+		        response.setHeader("Content-Description", "JSP Generated Data"); 
+		 
+		        if(!skip){
+		            // IE
+		            if(client.indexOf("MSIE") != -1){
+		                response.setHeader ("Content-Disposition", "attachment; filename="+new String(orgfilename.getBytes("KSC5601"),"ISO8859_1"));
+		            }else{
+		                // 한글 파일명 처리
+		                orgfilename = new String(orgfilename.getBytes("utf-8"),"iso-8859-1");
+		 
+		                response.setHeader("Content-Disposition", "attachment; filename=\"" + orgfilename + "\"");
+		                response.setHeader("Content-Type", "application/octet-stream; charset=utf-8");
+		            } 
+		             
+		            response.setHeader ("Content-Length", ""+file.length() );
+		       
+		            os = response.getOutputStream();
+		            byte b[] = new byte[(int)file.length()];
+		            int leng = 0;
+		             
+		            while( (leng = in.read(b)) > 0 ){
+		                os.write(b,0,leng);
+		            }
+		 
+		        }else{
+		            out.println("<script>alert('파일을 찾을 수 없습니다');history.back();</script>");
+		        }
+		 
+		        in.close();
+		        os.close();
+		 
+		    }catch(Exception e){
+		      e.printStackTrace();
+		    }
 
 		} else if (url.indexOf("replyInsert.do") != -1) {
 
src/main/java/model/MemberDAO.java
--- src/main/java/model/MemberDAO.java
+++ src/main/java/model/MemberDAO.java
@@ -144,12 +144,11 @@
 		}
 	}
 
-	public boolean setInsert(String writer, String title, String contents, int view, String inputDate) {
+	public boolean setInsert(String writer, String title, String contents, int view, String inputDate, String fileName) {
 		conn = null;
 		pstmt = null;
 		rs = null;
 		boolean result = false;
-
 		String query = "insert into user values(?, ?, ?, ?, ?, ?, ?, ?, ?)";
 
 		try {
@@ -161,7 +160,7 @@
 			pstmt.setString(4, contents);
 			pstmt.setString(5, inputDate);
 			pstmt.setInt(6, view);
-			pstmt.setString(7, null);
+			pstmt.setString(7, fileName);
 			pstmt.setInt(8, 0);     /*ÇØ´ç ±ÛÀÇ no¸¦ listNumÀ¸·Î ³Ö±â*/
 			pstmt.setInt(9, 0);
 			pstmt.executeUpdate();
 
src/main/webapp/WEB-INF/lib/cos-05Nov2002.jar (Binary) (deleted)
--- src/main/webapp/WEB-INF/lib/cos-05Nov2002.jar
Binary file is not shown
src/main/webapp/WEB-INF/lib/cos.jar (Binary)
--- src/main/webapp/WEB-INF/lib/cos.jar
+++ src/main/webapp/WEB-INF/lib/cos.jar
Binary file is not shown
src/main/webapp/view/write.jsp
--- src/main/webapp/view/write.jsp
+++ src/main/webapp/view/write.jsp
@@ -32,7 +32,7 @@
 	<div id="page">
 		<h1>This is write Page</h1>
 		<hr />
-		<form action="insert" method="post" id="form" >
+		<form action="insert" method="post" id="form" enctype="multipart/form-data">
 			작성자 : <input type="text" name="inputWriter"><br />
 			제목 : <input type="text" name="inputTitle"><br />
 			내용 : <textarea id="inputContent" name="inputContents"></textarea><br /> 
 
target/classes/config/FileDownloadHelper.class (Binary) (added)
+++ target/classes/config/FileDownloadHelper.class
Binary file is not shown
target/classes/control/MemberServlet.class (Binary)
--- target/classes/control/MemberServlet.class
+++ target/classes/control/MemberServlet.class
Binary file is not shown
target/classes/model/MemberDAO.class (Binary)
--- target/classes/model/MemberDAO.class
+++ target/classes/model/MemberDAO.class
Binary file is not shown
Add a comment
List