개발속이야기/Java

JSP file upload download 예제

스토리지기 2018. 1. 8. 09:40

<%@ 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