일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 프론트엔드
- 자바
- 데이터베이스
- 웹
- 프로그래밍
- 함수
- 메소드
- web
- 오라클
- Method
- JavaScript
- Database
- 파이썬
- function
- It
- 서블릿
- java
- 문자열
- Programming
- HTML
- Servlet
- String
- SQL
- 코딩
- 자바스크립트
- frontend
- PL/SQL
- Python
- oracle
- jsp
- Today
- Total
Untitled_Blue
[JSP] cos.jar를 활용한 파일 업로드 본문
안녕하세요. 이번 글은 파일 업로드에 대한 설명입니다.
- cos.jar
- JSP&Servlet에서 파일 업로드 기능을 구현하기 위한 라이브러리
- http://www.servlets.com/
Servlets.com
Home What's New? COS File Upload Library Servlet Polls Mailing Lists Servlet Engines Servlet ISPs Servlet Tools Documentation Online Articles The Soapbox "Java Servlet Programming, Second Edition" "Java Enterprise Best Practices" Speaking & Slides About Ja
www.servlets.com
상단의 사이트로 접속하면 좌측에 com.oreilly.servlet이 있는데 클릭 후 최하단으로 스크롤을 내리면 이미지처럼 다운로드 링크가 있을 것이다. 이를 통해 라이브러리를 다운로드해주면 된다.
이후 이클립스(또는 인텔리제이)를 실행하여 적용하고자 하는 프로젝트 안에 있는 src > main > webapp > WEB-INF > lib 폴더 안에 파일을 넣어서 적용해주면 cos.jar 라이브러리를 사용하기 위한 모든 준비가 완료된다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>FileUploadForm1</title>
</head>
<body>
<h2>FileUpload</h2>
<form action="<%=request.getContextPath() %>/File.do" name="FileUpload" method="post" enctype="multipart/form-data">
<input type="file" name="FileInfo">
<input type="submit" name="업로드">
</form>
</body>
</html>
상단의 JSP 소스코드는 파일을 업로드하기 위한 폼 양식을 구현하고 있다. 이때 필수적으로 사용하는 태그는 form과 input가 있는데 form 안에 속성은 enctype="multipart/form-data" 및 method="post"를 사용해야 한다. 또한 내부에 input type은 file과 submit이 있어야만 업로드할 파일을 선택하고 제출해서 서버에 업로드할 수 있다. 이제 백엔드 코드를 살펴보자.
package Testing;
import java.io.File;
import java.io.IOException;
import java.util.Enumeration;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.oreilly.servlet.MultipartRequest;
import com.oreilly.servlet.multipart.DefaultFileRenamePolicy;
@WebServlet("/File.do")
public class FileController extends HttpServlet {
public FileController() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.getWriter().append("Served at: ").append(request.getContextPath());
String fileSavePath = "C:/Users/users/Documents/eclipse-jee-2023-03-R-win32-x86_64/eclipse/WorkSpace/2023_JSP_Study/src/main/webapp/FileDict";
String encType = "EUC-KR";
int maxSize = 100*1024*1024; // 100MB
try {
MultipartRequest multi = null;
multi = new MultipartRequest(request, fileSavePath, maxSize, encType, new DefaultFileRenamePolicy());
Enumeration params = multi.getParameterNames();
while (params.hasMoreElements()) {
String name = (String)params.nextElement();
String value = multi.getParameter(name);
System.out.println("name : " + name + ", value : " + value);
}
Enumeration files = multi.getFileNames();
while(files.hasMoreElements()) {
String name = (String) files.nextElement();
String fileName = multi.getFilesystemName(name);
String original = multi.getOriginalFileName(name);
String type = multi.getContentType(name);
File f = multi.getFile(name);
}
} catch (Exception e) {
e.printStackTrace();
}
RequestDispatcher rd = request.getRequestDispatcher("/FileUploadTest.jsp");
rd.forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
상단의 코드는 cos.jar 라이브러리를 적용해서 파일 업로드를 구현해주는 소스코드이다. 먼저 MultipartRequest 클래스를 이해해야 한다.
- MultipartRequest multi = new MultipartRequest(HttpServletRequest request, String saveDirectory, int maxSize, String encoding, FileRenamePolicy policy)
MultipartRequest 클래스를 사용하기 위해서는 먼저 상단의 생성자를 통한 객체를 생성해줘야 한다. 매개변수는 크게 5개를 사용하는데 saveDirectory는 파일을 저장할 경로를 뜻하며 maxSize는 업로드 최대 허용 용량크기, encoding은 인코딩 타입을 의미한다. 나머지 두 개 중 마지막에 있는 FileRenamePolicy policy은 보통 new Default FileRenamePolicy()를 사용하는데 이는 기존에 업로드한 파일명과 업로드될 파일명이 같을 경우 덮어쓰기를 방지하기 위해 사용되고 있다.
메서드 | 리턴 타입 | 의미 |
.getContentType(String name) | String | 업로드된 파일의 형식을 반환 |
.getFile(String name) | File | 업로드된 파일의 객체를 반환 |
.getFileNames() | Enumeration | 프론트 내 input type="file"으로 된 파라미터의 이름 반환 |
.getFilesystemName(String name) | String | 실제로 업로드된 파일명을 문자열로 반환 |
.getOriginalFileName(String name) | String | 업로드된 파일명을 반환하나 중복 가능성 고려하여 변경 전 이름 반환 |
.getParameter(String name) | String | 객체에 있는 파라미터를 문자열로 반환 |
.getParameterNames() | Enumeration | 모든 파라미터의 이름 반환 |
.getParameterValues(String name) | String[] | 폼으로부터 전송된 파라미터를 배열로 반환 |
상단의 메서드 8개는 파일 업로드 기능을 구현하기 위해 자주 사용되는 메서드다.
'JSP&Servlet' 카테고리의 다른 글
[JSP]JSTL/EL 언어 (0) | 2024.06.28 |
---|---|
[JSP] 쿠키와 세션 (2) | 2024.03.16 |
[JSP] JavaBeans (자바빈즈) (1) | 2023.10.09 |
[JSP] 액션태그 (0) | 2023.10.08 |
[JSP] 내장객체 (1) | 2023.10.07 |