FlowerBombs
파일업로드 / 다운로드 본문
파일업로드
1 | <input type="file"> 요소에 의해 등록된 ㅏ일에 대한 업로드 처리 | cs |
HTML 폼 구성
1 2 3 | <form method="post" action="JSP페이지" entype="multipart/form-data"> <input type="file" name="photo" [multiple] /> </form> | cs |
★entype="multipart/form-data
[multiple] 다중업로드 가능
JSP에서의 파일 업로드
commons-io와 commons-fileupload 라이브러리를 활용하여 구현됨.
FileInfo.java
업로드 된 파일의 정보를 저장하기 위한 Beans클래스.
1 2 3 4 5 6 7 8 9 10 11 | public class FileInfo{ private String fieldName; // <input type="file">의 name속성 private String originName; // 원본 파일 이름 private String fileDir; // 파일이 장되어 있는 서버상의 경로 private String fileName; // 서버상의 파일 이름 private String contentType; // 파일의 형식 private long fileSize; // 파일의 용량 // 생성자, getter, setter 생략 } | cs |
UploadHelper.java
파일 업로드 수행 후 텍스트 정보와 파일 정보를 분류하여 보관한다.
JSP에서는 이 정보를 getter 메서드를 통해 리턴받아 사용한다.
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 | public class UploadHelper { // ------ 싱글톤 객체 생성 시작 ------- /** 자신의 Workspace 경로 */ public static final String homeDir = "자신의 workspace 경로"; /** 업로드 된 결과물이 저장될 폴더*/ public static final String fileDir = homeDir + "/upload"; /** 업로드가 진행될 임시 폴더 */ public static final String tempDir = fileDir + "/temp"; /** File정보를 저장하기 위한 컬렉션 */ private List<FileInfo> fileList; /** 그 밖의 일반 데이터를 저장하기 위한 컬렉션 */ private Map<String, String> paramMap; /** 업로드된 파일의 리스트를 리턴한다. */ public List<FileInfo> getFileList() { return this.fileList; } /** 업로드시에 함께 전달된 파라미터들의 컬렉션을 리턴한다. */ public Map<String, String> getParamMap() { return this.paramMap; } /** Multipart로 전송된 데이터를 판별하여 파일리스트와 텍스트 파라미터를 분류한다. */ public void multipartRequest(HttpServletRequest request) throws Exception { //... 생략... } } | cs |
파일 다운로드
- 웹 브라우저는 프로젝트 내의 WebContent 폴더 안에만 접근할 수 있다. 업로드 된 파일이 웹에 노출되지 않음.
- 파일업로드는 프로젝트 외부 경로에서 처리된다.
- 다운로드를 위해서는 JSP 파일이 업로드 된 파일을 직접 읽어들여서,
그 파일의 바이너리 데이터를 스스로에게 출력시켜야 한다.
- response객체를 통해 OutputStream을 생성하면 이러한 처리를 구현할 수 있다.
버퍼링
썸네일 이미지 웹 페이지 트래픽(=하루 누적 전송량) 절약 --> 트래픽 제한 있음.
사용자가 업로드한 이미지를 웹 페이지에 노출하기 위해 생성한 축소한 이미지 파일
- resize 형식 : 긴 축을 기준으로 이미지를 축소시키고 짧은 축은 비율에 맞게 축소
- crop 형식 : 짧은 축을 기준으로 이미지를 축소시키고 긴 축의 남는 부분을 잘라냄
UploadHelper에 구현된 기능
void multipartRequest(HttpServletRequest request)
1. 업로드 된 파일 데이터를 List<FileInfo> 형식으로 분류한다.
2. 전송된 텍스트 데이터를 Map<String, String> 형식으로 불류한다.
3. 분류된 데이터를 각각 getFileList()와 getParamMap()으로 리턴받을 수 있다.
void printFileStream(HttpServletResponse reesponse, String filePath, String orginName)
파일경로(filePath)와 원본 파일이름(orginName)을 전달하여 다운로드 처리한다.
String create Thumbnail(String loadFile, int width, int height, boolean crop)
썸네일 이미지를 생성하고 생성된 파일의 경로를 리턴한다.
void printFileStream(HttpServletResponse response, String filepath, int width, int height, boolean crop)
썸네일 이미지를 생성하고 생성된 파일을 다운로드 처리한다.