<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<c:set value="${pageContext.request.contextPath}" var = "cp" />
<!DOCTYPE html">
<html>
<head>
<meta charset="utf-8">
<title>사용자등록</title>
<link rel="stylesheet" href="${cp}/style/default.css" />
<link rel="stylesheet" href="${cp}/style/input2.css" />
</head>
<body>
<div id="pageContainer">
<%@ include file="../include/header.jsp" %>
<div id="content">
<br/><br/><br/>
<div id="inputcontent">
<div id="inputmain">
<div class="inputsubtitle">자료등록정보</div>
<form id="registerform" action="${cp}/bbs/write" method="post"
enctype="multipart/form-data">
<table>
<tr>
<th>제목</th>
<td>
<input type="text" id="title" name="title" style="width:580px" />
</td>
</tr>
<tr>
<th>작성자</th>
<td>
<input type="hidden" name="uploader" value="${sessionScope.loginUser}" />
${sessionScope.loginUser}
</td>
</tr>
<tr>
<th>첨부자료</th>
<td>
<input type="file" name="attach" style="width:580px;height:20px" />
</td>
</tr>
<tr>
<th>자료설명</th>
<td>
<textarea name="content" style="width:580px" rows="15"></textarea>
</td>
</tr>
</table>
<div class="buttons">
<input type="submit" value="등록" style="height:25px" />
<input type="button" value="취소" style="height: 25px"
onclick="location.href='${cp}/bbs/list'" />
</div>
</form>
</div>
</div>
</div>
</div>
</body>
</html>
package com.oraclejava.servlet;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.servlet.http.Part;
import com.oraclejava.model.Bbs;
import com.oraclejava.model.BbsDao;
import com.oraclejava.model.BbsFile;
/**
* Servlet implementation class WriteServlet
*/
@WebServlet("/bbs/write")
@MultipartConfig(
fileSizeThreshold = 5_242_880, //5MB
maxFileSize = 20_971_520L, // 20mb
maxRequestSize = 41_943_040L
)
public class WriteServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public WriteServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
HttpSession session = request.getSession();
if(session.getAttribute("loginUser") == null){
response.sendRedirect(request.getContextPath() + "/account/login.jsp");
return;
}
// 페이지이동
getServletContext().getRequestDispatcher("/bbs/writeform.jsp").forward(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
Part part = request.getPart("attach");
// 파일 업로드
String originalname = this.getFileName(part);
Date date = new Date();
SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmss");
String now = formatter.format(date);
String savedfilename = now + "_" + originalname;
File file = new File("c:/upload/" + savedfilename);
try(InputStream is = part.getInputStream()){
Files.copy(is, file.toPath());
}
catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
Bbs bbs = new Bbs();
bbs.setTitle(request.getParameter("title"));
bbs.setUploader(request.getParameter("uploader"));
bbs.setContent(request.getParameter("content"));
BbsDao dao = new BbsDao();
dao.insertBbs(bbs);
BbsFile bbsFile = new BbsFile();
bbsFile.setSavedFileName(savedfilename);
bbsFile.setUserFileName(originalname);
bbsFile.setBbsNo(bbs.getBbsno());
dao.insertBbsFile(bbsFile);
response.sendRedirect(request.getContextPath() + "/bbs/list");
}
private String getFileName(Part part) {
// TODO Auto-generated method stub
String name = null;
for(String dispotion : part.getHeader("Content-Disposition").split(";")) {
if(dispotion.trim().startsWith("filename")) {
name = dispotion.substring(dispotion.indexOf('=')+1)
.replace("\"", "").trim();
name = name.substring(name.lastIndexOf("\\")+1);
}
}
return name;
}
}
다운로드
package com.oraclejava.servlet;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.URLEncoder;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.oraclejava.model.BbsDao;
import com.oraclejava.model.BbsFile;
/**
* Servlet implementation class DownloadServlet
*/
@WebServlet("/bbs/download")
public class DownloadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public DownloadServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
//response.getWriter().append("Served at: ").append(request.getContextPath());
String no = request.getParameter("bbsfileno");
BbsDao dao = new BbsDao();
BbsFile bbsfile = dao.selectBbsFilesByFileNo(Integer.parseInt(no));
dao.updateDownloadCount(Integer.parseInt(no));
String file = "c:/upload/" + bbsfile.getSavedFileName();
byte[] b = new byte[4096];
FileInputStream fileInputStream = new FileInputStream(file);
String mimetype = getServletContext().getMimeType(file);
if(mimetype == null) {
// 무조건 다운로드
mimetype = "application/octet-stream";
}
response.setContentType(mimetype);
// 한글파일명 인코딩
String filename = URLEncoder.encode(bbsfile.getUserFileName(), "UTF-8");
response.setContentType(mimetype + "; charset=UTF-8");
response.setHeader("Content-Disposition",
"attachment; filename=" + filename);
/*
response.setHeader("Content-Disposition",
"attachment; filename=" + bbsfile.getUserFileName()
);
*/
ServletOutputStream servletOutputStream = response.getOutputStream();
int numRead = 0;
while((numRead = fileInputStream.read(b, 0, b.length)) != -1){
servletOutputStream.write(b, 0, numRead);
}
servletOutputStream.flush();
servletOutputStream.close();
fileInputStream.close();
}
}
'개발속이야기 > Java' 카테고리의 다른 글
Spring aspectj 예제 (0) | 2018.01.08 |
---|---|
Spring 과제 (0) | 2018.01.08 |
JSP ajax 테스트 예제 (0) | 2018.01.08 |
JSON Gson 예제 (0) | 2018.01.05 |
JSP REF 예제 (0) | 2018.01.04 |