일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- pyqt
- Oracle
- Homebrew
- crud
- python
- html
- Mac
- nodejs
- 객체지향
- Android
- 자바
- API
- ibatis
- JDBC
- 이클립스
- Error
- 컬렉션프레임워크
- 자바문제
- ddit
- 반복문
- FastAPI
- Java
- 대덕인재개발원
- 생활코딩
- servlet
- 맥
- spring
- jsp
- 단축키
- 배열
Archives
- Today
- Total
romworld
File Upload 본문
fileMain.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>
<a href="<%=request.getContextPath()%>/fileList.do">파일 목록 보기</a>
</body>
</html>
FileList
package kr.or.ddit.basic.fileupload.controller;
import java.io.IOException;
import java.util.List;
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.fileupload.service.FileInfoServiceImpl;
import kr.or.ddit.basic.fileupload.service.IFileInfoService;
import kr.or.ddit.vo.FileInfoVO;
@WebServlet("/fileList.do")
public class FileList extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
// Service객체 생성
IFileInfoService service = FileInfoServiceImpl.getInstance();
// DB에 저장된 전체 파일 정보 가져오기
List<FileInfoVO> fileList = service.getAllFileinfo();
// 구해진 파일 목록 정보를 View페이지로 보낸다 (forwarding방식으로...)
request.setAttribute("fileList", fileList);
request.getRequestDispatcher("/basic/fileupload/fileList.jsp")
.forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
fileList.jsp
<%@page import="kr.or.ddit.vo.FileInfoVO"%>
<%@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>Insert title here</title>
<%
// 서블릿에서 보내온 자료 받아오기
List<FileInfoVO> fileList = (List<FileInfoVO>)request.getAttribute("fileList");
%>
</head>
<body>
<h2>전체 파일 목록</h2><br><hr><br>
<a href="<%=request.getContextPath()%>/fileUpload.do">파일 업로드</a>
<table border="1">
<thead>
<tr>
<td>번호</td><td>작성자</td><td>저장 파일명</td><td>원래의 파일명</td><td>파일크기</td>
<td>날짜</td><td>비 고</td>
</tr>
</thead>
<tbody>
<%
if(fileList==null || fileList.size()==0){
%>
<tr><td colspan="7" style="text-aling : center;"> 파일 목록이 하나도 없습니다.</td></tr>
<%
}else{
for(FileInfoVO fileVo : fileList){
%>
<tr>
<td><%=fileVo.getFile_no() %></td>
<td><%=fileVo.getFile_writer() %></td>
<td><%=fileVo.getSave_file_name() %></td>
<td><%=fileVo.getOrigin_file_name() %></td>
<td><%=fileVo.getFile_size() %></td>
<td><%=fileVo.getFile_date() %></td>
<td><a href="<%=request.getContextPath()%>/fileDownload.do?fileno=<%=fileVo.getFile_no()%>">Download</a></td>
</tr>
<%
}
}
%>
</tbody>
</table>
</body>
</html>
FileUpload
package kr.or.ddit.basic.fileupload.controller;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
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.fileupload.service.FileInfoServiceImpl;
import kr.or.ddit.basic.fileupload.service.IFileInfoService;
import kr.or.ddit.vo.FileInfoVO;
/*
- Servlet 3.0이상에서 파일 업로드를 하려면 서블릿에 @MultipartConfig라는 애노테이션을 설정해야 한다.
- @MultipartConfig 애노테이션의 설정할 변수들...
1) location : 업로드한 파일이 임시적으로 저장될 경로 지정 (기본값 : "")
2) fileSizeThreshold : 이 곳에 지정한 값보다 큰 파일이 전송되면 location에 지정한
임시 디렉토리에 저장하여 처리한다. (단위 : byte, 기본값 : 0 (무조건 임시 디렉토리 사용))
3) maxFileSize : 1개의 파일의 전송할 수 있는 최대 크기 (단위 : byte, 기본값 : -1L (무제한))
4) maxRequestSize : 서버로 전송되는 Request데이터 전체의 최대 크기 (단위 : byte, 기본값 : -1L (무제한))
(모든 파일 크기 + formData)
*/
@WebServlet("/fileUpload.do")
@MultipartConfig(
fileSizeThreshold = 1024 * 1024 * 10, maxFileSize = 1024 * 1024 * 30,
maxRequestSize = 1024 * 1024 * 100
)
public class FileUpload extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 현재 서블릿을 GET방식으로 요청하면 무조건 file 입력 폼으로 이동하기
request.getRequestDispatcher("/basic/fileupload/fileUploadForm.jsp")
.forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 파일 업로드는 무조건 POST방식만 사용할 수 있다.
request.setCharacterEncoding("utf-8");
// 업로드된 파일이 저장될 폴더 설정
String uploadPath = "/Users/rom/Desktop/uploadFiles";
// 저장될 폴더가 없으면 새로 만들어 놓는다.
File f = new File(uploadPath);
if(!f.exists()) {
f.mkdirs();
}
// 파일이 아닌 일반 파라미터 데이터는 getParameter() 메서드나 getParameterValues()메서드를
// 이용해서 구한다.
String userName = request.getParameter("username");
System.out.println("일반 파라미터 데이터 username =" + userName);
//----------------------------------------------------------------
// 수신 받은 파일 데이터 처리하기...
String fileName =""; // 원래의 파일명이 저장될 변수
// 업로드한 파일이 여러개일 때 전체 파일 정보가 저장될 List객체 생성
List<FileInfoVO> fileList = new ArrayList<FileInfoVO>();
/*
- Servlet 3.0이상에서 새롭게 추가된 Upload용 메서드
1) request.getParts() ==> 전체 Part객체를 Collection객체에 담아서 반환한다.
2) request.getPart("이름") ==> 지정된 '이름'을 가진 개별 Part객체를 반환한다.
'이름' ==> form태그의 입력요소의 name속성값으로 구별한다.
*/
// 전체 Part객체 개수만큼 반복 처리
for(Part part : request.getParts()) {
fileName = extractFilename(part); // 파일명 구하기
// 찾는 파일명이 빈문자열("")이면 이것은 파일 아닌 일반 파라미터라는 의미이다.
if(!"".equals(fileName)) { // 파일인지 검사
// 1개의 Upload된 파일에 대한 정보를 저장할 VO객체 생성
FileInfoVO fvo = new FileInfoVO();
fvo.setFile_writer(userName); // 작성자
fvo.setOrigin_file_name(fileName); // 원래의 파일명
// 실제 저장되는 파일이름이 중복되는 것을 방지하기 위해서 UUID객체를 이용하여
// 저장할 파일명을 만든다.
String saveFilename = UUID.randomUUID().toString();
// 새롭게 만들어진 저장할 파일명을 VO에 셋팅
fvo.setSave_file_name(saveFilename);
// part.getSize()메서드를 이용해서 파일의 크기르 구할 수 있다. (단위 : byte)
// byte단위를 KB단위로 변환해서 VO에 셋팅
fvo.setFile_size((int)Math.ceil(part.getSize() / 1024.0));
// 파일 저장하기
try {
// part.write() 메서드를 이용하여 upload된 파일을 저장한다.
// 형식) part.write("저장할 경로/저장할 파일명");
part.write(uploadPath + File.separator+ saveFilename); // 파일 저장
} catch (IOException e) {
e.printStackTrace();
}
// 1개의 파일 정보를 List에 추가한다.
fileList.add(fvo);
} // if문 끝..
} // for문 끝...
// 파일 정보를 DB에 추가한다.
IFileInfoService service = FileInfoServiceImpl.getInstance(); // 서비스 객체 생성
// List에 저장된 데이터를 DB에 추가하기 (반복문 이용)
for(FileInfoVO fvo : fileList) {
service.insertFileinfo(fvo);
}
// 저장이 완료된 후에는 파일 목록을 보여준다.
response.sendRedirect(request.getContextPath() + "/fileList.do");
}
//-------------------------------------------------
/*
- Part 구조
1) 파일이 아닌 일반 파라미터 데이터인 경우
---------------------------asdfslakdflaksdlfsjdk ==> Part를 구분하는 구분선 역할을 한다.
content-disposition : form-data; name="username" ==> 파라미터 명
==> 빈줄
Hong ==> 파라미터 값
*/
/*
2) 파일일 경우
---------------------------asdfslakdflaksdlfsjdk ==> Part를 구분하는 구분선 역할을 한다.
content-disposition : form-data; name="upfile1"; filename="test1.txt" ==> 파일 정보
content-type : text/plain ==> 파일 종류
==> 빈줄
abcd1234안녕 ==> 파일 내용
*
*/
// Part구조 안에서 파일명을 찾는 메서드
private String extractFilename(Part part) {
String fileName = "";
String contentDisposition = part.getHeader("content-disposition");
String[] items = contentDisposition.split(";");
for(String item : items) {
if(item.trim().startsWith("filename")) { // filename="test1.txt"
fileName = item.substring(item.indexOf("=")+2, item.length()-1);
}
}
return fileName;
}
}
fileUploadForm.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>
<h3>File Upload Form</h3>
<form action="<%=request.getContextPath()%>/fileUpload.do"
method="post" enctype="multipart/form-data">
<!--파일 업로드는 post밖에 못함, enctype을 적어줘야함 -->
- 작성자 이름 : <input type="text" name="username"><br><br>
- 한 개의 파일 선택 : <input type="file" name="upfile1"><br><br>
- 여러 개의 파일 선택 : <input type="file" name="upfile2" multiple><br><br>
<input type="submit" value="전 송">
<button type="submit">전 송</button>
</form>
<br><hr><br>
<a href="<%=request.getContextPath()%>/fileList.do">파일 목록 보기</a>
</body>
</html>
img 업로드
imageView.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>
<img src="../../images/카푸치노.jpg" width="200"><br><br>
<img src="/webTest/images/카푸치노.jpg" width="200"><br><br>
<img src="<%=request.getContextPath() %>/images/카푸치노.jpg" width="200"><br>
<img src="<%=request.getContextPath() %>/images/imageSrcView.do?fileno=3" width="200"><br>
</body>
</html>
ImageSrcView
package kr.or.ddit.basic.fileupload.controller;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
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.fileupload.service.FileInfoServiceImpl;
import kr.or.ddit.basic.fileupload.service.IFileInfoService;
import kr.or.ddit.vo.FileInfoVO;
@WebServlet("/images/imageSrcView.do")
public class ImageSrcView extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
int fileNo = Integer.parseInt(request.getParameter("fileno"));
IFileInfoService service = FileInfoServiceImpl.getInstance();
FileInfoVO fvo = service.getFileinfo(fileNo);
String filePath = "/Users/rom/Desktop/uploadFiles";
File file = new File(filePath, fvo.getSave_file_name());
BufferedInputStream bin = null;
BufferedOutputStream bout = null;
try {
bout = new BufferedOutputStream(response.getOutputStream());
bin = new BufferedInputStream(new FileInputStream(file));
byte[] temp = new byte[1024];
int len = 0;
while((len = bin.read(temp)) > 0){
bout.write(temp, 0, len);
}
bout.flush();
} catch (Exception e) {
System.out.println("입출력오류..." + e.getMessage());
}finally{
if(bin!=null) try {bin.close();} catch(IOException e) {}
if(bout!=null) try {bout.close();} catch(IOException e) {}
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
'JAVA > 개념정리' 카테고리의 다른 글
File upload 2 (1) | 2022.12.08 |
---|---|
Ajax ( JSON) (1) | 2022.12.06 |
Session (0) | 2022.12.06 |
Cookie 2 ( login) (0) | 2022.12.06 |
Cookie (0) | 2022.12.06 |
Comments