작업에 필요한 라이브러리!
1. Controller
- FileUpload
package test;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.List;
import java.util.UUID;
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 org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
@WebServlet("/file2")
public class FileUpload2 extends HttpServlet{ // 다중 파일 업로드 된 파일명 다 표현되게!! , 단점 : 중복된 파일은 덮어씌움!!
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.getRequestDispatcher("form.jsp").forward(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String saveDir = "D:\\upload";
int size = 10 * 1024 * 1024;
File curretDir = new File(saveDir);
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setRepository(curretDir);
factory.setSizeThreshold(size);
ServletFileUpload upload = new ServletFileUpload(factory);
try {
List<FileItem> items = upload.parseRequest(req);
for(FileItem fi : items) {
if(fi.isFormField() ) {
System.out.println(fi.getFieldName() + " = " + fi.getString("utf-8"));
}
else {
System.out.println(fi.getFieldName());
String origin = fi.getName();
System.out.println(origin);
String ext = origin.substring(origin.lastIndexOf(".")); // 확장자 가져오기
UUID uuid = UUID.randomUUID(); // 단점 보완! 이름 고유값 줌으로써!
String name = uuid + ext;
System.out.println(fi.getSize());
File upPath = new File(curretDir + "\\" + getTodayStr()); // 날짜별 구분 여러모로 좋음
if(!upPath.exists()) {
upPath.mkdirs();
}
fi.write(new File(upPath, name));
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
private String getTodayStr() {
return new SimpleDateFormat("yyyy/MM/dd").format(System.currentTimeMillis()); // 포맷한 날짜 개념으로 파일 뎁스생김.
}
}
2. jsp
- form.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form method="post" enctype="multipart/form-data">
<input type="text" >
<input type="file" name="f" multiple>
<button>업로드</button>
</form>
</body>
</html>
3. 웹 브라우저 출력화면
- 업로드 할 파일 선택
- 업로드 이후 콘솔에 업로드 한 파일 명과 크기가 표시된다.
- 미리 지정해뒀던 업로드 파일이 담길 폴더
- 자동 날짜 분류
- 중복파일도 덮어씌워지지 않고 개인의 고유한 값을 할당 받은것을 볼 수 있다.
완료!
반응형
'JAVA_SERVLET' 카테고리의 다른 글
[JAVA_SERVLET] 회원 목록 조회 (+DB 연동) (0) | 2022.03.16 |
---|---|
[JSP] 로그인 기능, 창 만들기 (bootStrap5 적용), 유효성 검사 (0) | 2022.03.15 |
[JAVA_SERVLET] 서블릿을 이용한 환율 계산기. (0) | 2022.03.15 |
[JAVA_SERVLET] .jsp 적용이 안된 경우 (0) | 2022.03.14 |