파일업로드 예제 p.324 ~ p.333
1. 단일 파일 업로드 예제
partUploadForm1.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//En"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Insert title here</title>
</head>
<body>
<h1>단일 파일 업로드 테스트</h1>
<form action="partUploadPro1" method="post" enctype="multipart/form-data">
<label for ="writer">작성자 : </label>
<input type="text" name="writer" id="writer"><br>
<label for ="partFile1">업로드 파일: </label>
<input type="file" name="partFile1" id="partFile1"><br>
<input type="submit" value="단일업로드"/>
</form>
</body>
</html>
- post 방식으로 partUploadPro1에 입력받은 데이터 값들을 전송한다
partUploadPro1.java
package com.example.loginservlet;
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.Part;
import java.io.IOException;
import java.io.PrintWriter;
@WebServlet("/partUploadPro1")
@MultipartConfig(
fileSizeThreshold = 0,
location = "C:/upload"
)
public class PartUploadPro1Servlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public PartUploadPro1Servlet(){
super();
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
request.setCharacterEncoding("UTF-8");
String writer = request.getParameter("writer");
Part part = request.getPart("partFile1");
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
String contentDisposition = part.getHeader("content-disposition");
String uploadFileName = getUploadFileName(contentDisposition);
part.write(uploadFileName);
out.println("작성자 " + writer + "님이" + uploadFileName + "파일을 업로드하였습니다.");
}
private String getUploadFileName(String contentDisposition) {
String uploadFileName = null;
String[] contentSplitStr = contentDisposition.split(";");
int firstQutosIndex = contentSplitStr[2].indexOf("\"");
int lastQutosIndex = contentSplitStr[2].lastIndexOf("\"");
uploadFileName = contentSplitStr[2].substring(firstQutosIndex+1,lastQutosIndex);
return uploadFileName;
}
}
- 서블릿에서 multipart/form data 형태로 전송된 데이터는 @MultiPartConfig 어노테이션을 지정해서 처리한다. 업로드된 파일이 0바이트보다 크면 임시 디렉터리에 저장되고, 업로드된 파일이 최종 저장될 경로를 C:\upload 디렉터리로 지정 (저장될 경로에 디렉터리를 생성해주어야 실행된다.)
- @MultiPartConfig
- fileSizeThreshod : 파일 디스크에 쓰여지는 사이즈를 지정할 수 있다 크기 값은 바이트 단위(1024 * 1024 * 10 = 10MB)
- location: 파일이 기본적으로 저장되는 디렉토리, 기본값은 ""·
- maxRequestSize: multipart/form-data 요청에 허용되는 최대 크기, 기본값은 무제한을 의미하는 -1L
- ·maxFileSize: 파일을 업로드할 수 있는 최대 크기, 값은 바이트 단위
- 입력 양식의 name 속성 값이 partFile인 file 입력 양식에서 전송되어온 파일을 Part 객체로 얻어온다.
- Part Interface
- Part 인터페이스 miltipart/form-data POST 요청으로 수신받은 from 아이템이나 하나의 Part를 나타낸다.
- getInputStream(), write(String fileName)으로 읽고 쓰는데 사용
- content-dispotisition 헤더 정보를 얻어오는 부분
- 이 헤더 정보는 form-data; name="partFile1"; filename="C:\Users..test.txt" 와 같은 형태로 반환된다. (이 정보를 이용하여 파일에서 클라이언트가 선택한 파일의 이름을 얻어올 수 있다)
1. 다중 파일 업로드 예제(추가 예정)
'JSP' 카테고리의 다른 글
2021-08-26(게시판 프로젝트 구조) (0) | 2021.08.26 |
---|---|
2021-08-25(JSP-JSTL) (0) | 2021.08.25 |
2021-08-23-(JSP-파일업로드)-내용추가 필요 (0) | 2021.08.24 |
2021-08-17(JSP개념) (0) | 2021.08.17 |
2021-08-12(JSP 개발환경 설정, 톰캣연결) (0) | 2021.08.12 |