fileUploadTest
fileVO
package kr.or.ddit.basic.vo;
public class fileVO {
private String fileName; //파일이름
private long fileSize; //파일크기
private String uploadStatus; //upload성공 여부
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public long getFileSize() {
return fileSize;
}
public void setFileSize(long fileSize) {
this.fileSize = fileSize;
}
public String getUploadStatus() {
return uploadStatus;
}
public void setUploadStatus(String uploadStatus) {
this.uploadStatus = uploadStatus;
}
}
fileUploadTest.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>
<h2>File Upload 연습</h2>
<!-- multipart/form-data : 파일 전송시 반드시 필요한 속성 -->
<form method="post" enctype="multipart/form-data" action="<%=request.getContextPath()%>/fileUploadTest.do">
이름 : <input type="text" name="userName"><br>
파일1개 선택 : <input type="file" name="uploadFile1"><br>
다중파일 선택 : <input type="file" name="uploadFile2" multiple><br>
<button tyle="submit">자료 전송</button>
</form>
<br><hr><br>
<a href="<%=request.getContextPath()%>/uploadFileList.do">
업로드된 전체 파일 목록 가져오기</a>
</body>
</html>
uploadFileList.do
package kr.or.ddit.basic.filetest;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
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 kr.or.ddit.basic.vo.fileVO;
@WebServlet("/uploadFileList.do")
public class UploadFileList extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// Upload된 전체 파일 목록을 구성하는 서블릿
String uploadPath = "d:/d_other/uploadFiles";
//저장될 폴더가 없으면 새로 생성한다.
File fileUploadDir = new File(uploadPath);
if(!fileUploadDir.exists()) {
fileUploadDir.mkdir();
}
//파일이 저장된 폴더에서 전체 파일목록을 구해와서 List에 담아준다.
File[] allFiles = fileUploadDir.listFiles();
List<fileVO> fileList = new ArrayList<fileVO>();
for(File file : allFiles) {
if(file.isFile()) {
fileVO fvo = new fileVO();
fvo.setFileName(file.getName());
fvo.setFileSize((int)Math.ceil(file.length() / 1024.0));
fvo.setUploadStatus("Success");
fileList.add(fvo);
}
}
request.setAttribute("uploadFileList", fileList);
RequestDispatcher rd =
request.getRequestDispatcher("/fileupload/uploadFiles.jsp");
rd.forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
uploadFiles.jsp
<%@page import="kr.or.ddit.basic.vo.fileVO"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Servlet File Upload</title>
</head>
<body>
<%
String userName = (String)request.getAttribute("userName"); //이름을 받아온것
List<fileVO> fileList =
(List<fileVO>)request.getAttribute("uploadFileList");
%>
<%
if(userName!=null){
%>
<h2><%=userName %>임이 방금 업로드 한 파일 목록</h2>
<%
}else{
%>
<h2>전체 업로드 한 파일 목록</h2>
<%
}
%>
<table border='1'>
<tr>
<td>파일이름</td><td>파일크기</td><td>업로드상태</td><td>비고</td>
</tr>
<%
if(fileList!=null){
for(fileVO fileVo : fileList){
%>
<tr>
<td><%=fileVo.getFileName()%></td>
<td><%=fileVo.getFileSize()%></td>
<td><%=fileVo.getUploadStatus()%></td>
<td><a href="<%=request.getContextPath()%>/fileDownLoad.do?filename=<%=fileVo.getFileName()%>">DownLoad</a></td>
</tr>
<%
}
}
%>
</table>
<br><hr><br>
<a href="<%=request.getContextPath()%>/fileupload/fileUploadTest.jsp">
파일 업로드 시작문서로 가기</a>
</body>
</html>
fileUploadTest.do
package kr.or.ddit.basic.filetest;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.RequestDispatcher;
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 kr.or.ddit.basic.vo.fileVO;
/*
* Servlet 3.0이상에서 파일 업로드를 처리하려명 서블릿에
* @MultipartConfig라는 애노테이션을 설정해야 한다.
*
* @MultipartConfig 애노테이션 설정 방법(사용되는 변수 및 역할)
* 1) location : 업로드한 파일이 임시적으로 저장될 경로를 지정한다.
* (기본값 : "")
* 2) fileSizeThreshold : 이 속성에서 지정한 크기보다 큰 파일은
* 위의 location에서 지정한 디스크의 임시 디렉토리에 저장
* (단위 : byte, 기본값 : 0 (무조건 임시 디렉토리를 사용한다.))
* 3) maxFileSize : 1개의 파일의 최대 크기
* (단위:byte, 기본값:-1L(무제한))
* 4) maxRequestSize : 서버로 전송되는 Request데이터의 최대 크기
* (단위:byte, 기본값:-1L(무제한))
*
*/
@WebServlet("/fileUploadTest.do")
@MultipartConfig(
fileSizeThreshold = 1024 * 1024 * 10,
maxFileSize = 1024 * 1024 * 30, maxRequestSize = 1024 * 1024 * 50 //전체는 50이 넘어가지 않도록해라
)
public class FileUploadTest extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// upload한 파일이 저장될 폴더 설정
String uploadPath = "D:/D_Other/uploadFiles";
//저장될 폴더가 없으면 새로 생성한다.
File fileUploadDir = new File(uploadPath);
if(!fileUploadDir.exists()) {
fileUploadDir.mkdir();
}
//파일이 아닌 일반 데이터는 getParameter()메서드나
//getParameterValues()메서드를 이용해서 구한다.
request.setCharacterEncoding("utf-8");
String userName = request.getParameter("username");//jsp내임값이 서블릿에 들어온것
System.out.println("일반 파라미터 데이터(username):" + userName);
//-------------------
String fileName = ""; //파일명이 저장될 변수 선언
//한번에 여러 파일 업로드 후 보여줘야 되서 리스트 만들기
List<fileVO> fileList = new ArrayList<fileVO>();
/*
* 파트로 데이터를 구분해서 전송하는 전송방식이므로
* 파트별로 처리할 수 있어야 한다
*
* - Servlet 3.0이상에 새롭게 추가된 Upload용 메서드
* 1) request.getParts(); ==> 전체 Part객체가 저장된 컬렉션을 반환한다.
* 2) request.getPart("part이름") ==> 지정된 이름을 가진 part객체를 반환한다.
*
* - 전체 파트를 가져다가 하나씩 검사하고 파일,일반 데이터를 구분하고 찾아낸 후
* 파일이면 파일에 대한 정보를 가져와야함
*/
for(Part part : request.getParts()) {//part에 저장되서 처리되는 구조
//파일명 구하기
fileName = extractFileName(part);
//파일내임이 공백이면
//이것은 파일이 아닌 일반 파라미터라는 의미이다.
if(!"".equals(fileName)) {
//1개의 업로드 파일에 대한 정보를 저장할 객체 생성
fileVO fileVo = new fileVO();
fileVo.setFileName(fileName);
fileVo.setFileSize((int)Math.ceil(part.getSize()/1024.0));
try {
//파일 저장 ==> Part객체의 write()메서드 이용
part.write(uploadPath + File.separator + fileName);
fileVo.setUploadStatus("Success");
} catch (IOException e) {
fileVo.setUploadStatus("Fail : " + e.getMessage());
}
//처리된 파일 정보를 저장한 객체를 List에 추가
fileList.add(fileVo);
}
}//for문 끝...
request.setAttribute("userName", userName);
request.setAttribute("uploadFileList", fileList);
RequestDispatcher rd =
request.getRequestDispatcher("/fileupload/uploadFiles.jsp");
rd.forward(request, response);
} //doPost()메서드 끝...
/*
* - Part 구조
* 1) 파일이 아닐 때 (즉, 일반 파라미터 데이터일 경우)
* --------very132465897546 ==> 이상한 값 : Part를 구분하는 구분선
* content-disposition : form-data; name="username" ==> 파라미터명
* ==> 빈줄
* tester ==> 파라미터 값
*
* 2) 파일일 경우
* --------very132465897546 ==> 이상한 값 : Part를 구분하는 구분선
* content-disposition : form-data; name="uploadFile1"; filename="test1.txt" ==> 파라미터명
* content-Type : text/plain ==> 파일 종류
* ==> 빈줄
* abcd1234!@#$ ==> 파일의 내용
*/
// Part영역에서 읽어올 '파일명'을 찾아 반환하는 메서드
private String extractFileName(Part part) {
String fileName = "";
String contentDisposion = part.getHeader("content-disposition");
//form-data; name="username" ==> 파일이 아닐때
//form-data; name="uploadFile1"; filename="test1.txt" ==> 파일일때
String[] items = contentDisposion.split(";");
for(String item : items) {
if(item.trim().startsWith("filename")) {
//filename="test1.txt" ==> item변수값
fileName =
item.substring(item.indexOf("=")+2, item.length()-1);
}
}
return fileName;
}
}
Author And Source
이 문제에 관하여(fileUploadTest), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@susan9905/fileUploadTest저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)