Search

JSP ํŒŒ์ผ ์—…๋กœ๋“œ (Jakarta)

๊ฐœ๋ฐœํ™˜๊ฒฝ ์ฒดํฌ

Tomcat 10.1
Servlet 6.0
JDK 17

ํ…Œ์ŠคํŠธ

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

โ€ข
fileupload01.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>ํŒŒ์ผ ์—…๋กœ๋“œ</title> </head> <body> <!-- ์„œ๋ธ”๋ฆฟ์œผ๋กœ ์š”์ฒญ --> <%-- <form action="<%= request.getContextPath() %>/upload" method="post" enctype="multipart/form-data"> --%> <!-- JSP๋กœ ์š”์ฒญ --> <form action="<%= request.getContextPath() %>/fileupload01_pro.jsp" method="post" enctype="multipart/form-data"> <div> ์ด ๋ฆ„ : <input type="text" name="name" /> </div> <div> ์ œ ๋ชฉ : <input type="text" name="title" /> </div> <div> ํŒŒ ์ผ : <input type="file" name="file1" /> <br> ํŒŒ ์ผ : <input type="file" name="file2" /> <br> </div> <div> <input type="submit" value="์—…๋กœ๋“œ" /> </div> </form> </body> </html>
HTML
๋ณต์‚ฌ
โ€ข
fileupload01_pro.jsp
<%@page import="org.apache.commons.fileupload2.jakarta.*"%> <%-- Jakarta Servlet์„ ์œ„ํ•œ Commons FileUpload ํด๋ž˜์Šค ์ž„ํฌํŠธ --%> <%@page import="org.apache.commons.fileupload2.core.*"%> <%-- Commons FileUpload์˜ ์ฝ”์–ด ๊ธฐ๋Šฅ ํด๋ž˜์Šค ์ž„ํฌํŠธ --%> <%@page import="java.nio.charset.StandardCharsets"%> <%-- ๋ฌธ์ž ์ธ์ฝ”๋”ฉ ์ƒ์ˆ˜ ์‚ฌ์šฉ์„ ์œ„ํ•œ ์ž„ํฌํŠธ --%> <%@page import="java.io.FileOutputStream"%> <%-- ํŒŒ์ผ ์ €์žฅ์„ ์œ„ํ•œ ์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ ํด๋ž˜์Šค --%> <%@page import="java.io.InputStream"%> <%-- ํŒŒ์ผ ์ž…๋ ฅ์„ ์œ„ํ•œ ์ž…๋ ฅ ์ŠคํŠธ๋ฆผ ํด๋ž˜์Šค --%> <%@page import="java.nio.charset.Charset"%> <%-- ๋ฌธ์ž์…‹ ๊ด€๋ จ ํด๋ž˜์Šค --%> <%@page import="java.io.File"%> <%-- ํŒŒ์ผ ๋ฐ ๋””๋ ‰ํ„ฐ๋ฆฌ ์ œ์–ด์šฉ ํด๋ž˜์Šค --%> <%@page import="java.util.List"%> <%-- ๋ฆฌ์ŠคํŠธ ์ž๋ฃŒํ˜• ์‚ฌ์šฉ์„ ์œ„ํ•œ ์ž„ํฌํŠธ --%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%-- JSP ํŽ˜์ด์ง€ ์„ค์ • (์–ธ์–ด, ์ฝ˜ํ…์ธ  ํƒ€์ž…, ์ธ์ฝ”๋”ฉ) --%> <% // ํŒŒ์ผ ์—…๋กœ๋“œ๊ฐ€ ์ €์žฅ๋  ๊ฒฝ๋กœ ์„ค์ • String uploadPath = "C:/upload/"; File uploadDir = new File(uploadPath); // ํ•ด๋‹น ๊ฒฝ๋กœ์— ๋Œ€ํ•œ File ๊ฐ์ฒด ์ƒ์„ฑ if( !uploadDir.exists() ) { // ํ•ด๋‹น ๊ฒฝ๋กœ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด uploadDir.mkdirs(); // ๋””๋ ‰ํ† ๋ฆฌ ์ƒ์„ฑ } // ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์˜ ๋ฌธ์ž ์ธ์ฝ”๋”ฉ ์„ค์ • request.setCharacterEncoding("UTF-8"); // ์ž„์‹œ ํŒŒ์ผ ์ €์žฅ ๊ฒฝ๋กœ ์„ค์ • (java์˜ ๊ธฐ๋ณธ tmp ๋””๋ ‰ํ† ๋ฆฌ) File repository = new File( System.getProperty("java.io.tmpdir") ); // FileItemFactory ์„ค์ •: ์—…๋กœ๋“œ๋œ ํ•ญ๋ชฉ์„ ์ƒ์„ฑํ•˜๋Š” ๊ณต์žฅ ๊ฐ์ฒด FileItemFactory factory = DiskFileItemFactory.builder().setFile(repository).get(); // Servlet ๊ธฐ๋ฐ˜ ํŒŒ์ผ ์—…๋กœ๋“œ ๊ฐ์ฒด ์ƒ์„ฑ JakartaServletFileUpload upload = new JakartaServletFileUpload(factory); // ํ˜„์žฌ ์š”์ฒญ์„ ํŒŒ์‹ฑํ•˜๊ธฐ ์œ„ํ•œ Context ๊ฐ์ฒด ์ƒ์„ฑ JakartaServletRequestContext context = new JakartaServletRequestContext(request); try { // ์š”์ฒญ์—์„œ form field ๋ฐ ํŒŒ์ผ์„ ํŒŒ์‹ฑํ•˜์—ฌ ๋ฆฌ์ŠคํŠธ๋กœ ๊ฐ€์ ธ์˜ด List<FileItem> items = upload.parseRequest(context); for( FileItem item : items ) { // ๋ฆฌ์ŠคํŠธ์˜ ๊ฐ ํ•ญ๋ชฉ์— ๋Œ€ํ•ด ์ฒ˜๋ฆฌ // ํ…์ŠคํŠธ ํผ ํ•„๋“œ์ธ ๊ฒฝ์šฐ if( item.isFormField() ) { // UTF-8๋กœ ์ธ์ฝ”๋”ฉ๋œ ๊ฐ’ ์ถœ๋ ฅ out.println(item.getFieldName() + " : " + item.getString(StandardCharsets.UTF_8) + "<br>"); } // ํŒŒ์ผ ์—…๋กœ๋“œ ํ•„๋“œ์ธ ๊ฒฝ์šฐ else { String fieldName = item.getFieldName(); // ํ•„๋“œ ์ด๋ฆ„ String fileName = item.getName(); // ์—…๋กœ๋“œ๋œ ํŒŒ์ผ ์ด๋ฆ„ String uploadedName = System.currentTimeMillis() + "_" + item.getName(); // ์ €์žฅ ์‹œ ์‚ฌ์šฉํ•  ํŒŒ์ผ ์ด๋ฆ„ // ํŒŒ์ผ๋ช…์ด ๋น„์–ด์žˆ์ง€ ์•Š์œผ๋ฉด if( fileName != null && !fileName.isEmpty() ) { // ์—…๋กœ๋“œ ๊ฒฝ๋กœ์— ์ €์žฅํ•  ํŒŒ์ผ ๊ฐ์ฒด ์ƒ์„ฑ File uploadedFile = new File(uploadDir, fileName); try ( InputStream is = item.getInputStream(); // ์—…๋กœ๋“œ๋œ ํŒŒ์ผ์˜ ์ž…๋ ฅ ์ŠคํŠธ๋ฆผ FileOutputStream fos = new FileOutputStream(uploadedFile); // ํŒŒ์ผ๋กœ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•œ ์ŠคํŠธ๋ฆผ ) { is.transferTo(fos); // ํŒŒ์ผ ์ €์žฅ ์ฒ˜๋ฆฌ // ์—…๋กœ๋“œ ๊ฒฐ๊ณผ ์ถœ๋ ฅ out.println("============================================ <br>"); out.println("ํ•„๋“œ ์ด๋ฆ„ : " + fieldName + "<br>"); out.println("์›๋ณธ ํŒŒ์ผ๋ช… : " + fileName + "<br>"); out.println("์ €์žฅ ํŒŒ์ผ๋ช… : " + uploadedName + "<br>"); out.println("ํƒ€์ž… : " + item.getContentType() + "<br>"); out.println("๊ฒฝ๋กœ : " + uploadedFile.getAbsolutePath() + "<br>"); out.println("ํฌ๊ธฐ : " + uploadedFile.length() + "<br>"); } catch( Exception e ) { // ํŒŒ์ผ ์ €์žฅ ์ค‘ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ ์ถœ๋ ฅ e.printStackTrace(); } } } } } catch( Exception e ) { // ์ „์ฒด ์—…๋กœ๋“œ ์ฒ˜๋ฆฌ ์ค‘ ์˜ค๋ฅ˜ ๋ฐœ์ƒ ์‹œ ์ถœ๋ ฅ out.println("ํŒŒ์ผ ์—…๋กœ๋“œ ์ค‘ ์—๋Ÿฌ ๋ฐœ์ƒ"); e.printStackTrace(); } %>
HTML
๋ณต์‚ฌ