Spring 설정멀티 파일업로드, 파일다운로드 구현
파일처리는 웹프로젝트를 공부하면서 마주치는 큰 고비중 한가지 입니다. 저의 경우에는 파일처리와 네트워크통신 이 두가지가 가장 저를 힘들게 했는데 오늘 저를 힘들게 했던 파일처리에 대해서 정리해 볼려고 합니다.
파일처리는 크게 파일업로드와 파일다운로드 이렇게 두가지로 나뉘어 집니다. 이제 여기서 세부적으로 들어가면 DB에 파일정보를 입력하는 과정과 보안을 위하여 확장자체크, 용량체크등의 작업을 하고 안정적으로 관리하기 위하여 파일이 저장되는 디렉토리관리, 파일명중복 방지등 부수적으로 해야할 업무들이 많습니다. 이 포스팅에서는 먼저 JSP프론트단의 작업후에 파일업로드를 구현하고 마지막으로 파일다운로드를 구현하는데 그 과정에 있어서 보안적인 부분과 기타 부수적인 작업들에 대해서도 함께 기술할 예정입니다.
1. 환경설정
<!-- commons FileUpload -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
메이븐에 필요한 라이브러리를 추가합니다.
<!-- file Upload -->
<beans:bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- max upload size in bytes -->
<beans:property name="maxUploadSize" value="20971520" /> <!-- 20MB -->
<!-- max size of file in memory (in bytes) -->
<beans:property name="maxInMemorySize" value="1048576" /> <!-- 1MB -->
<!-- 전달되는 매개변수의 인코딩을 설정 -->
<beans:property name="defaultEncoding" value="UTF-8" />
</beans:bean>
DispacherServlet에 대한 설정입니다.
maxUploadSize는 최대로 업로드 가능한 바이트 크기입니다. -1은 제한없이 무제한으로 업로드가 가능합니다
maxInMemorySize는디스크에 임시 파일을 생성하기 전에 메모리에 보관할 수 있는 최대 바이트 크기입니다.
defaultEncording는 요청을 파싱할 때 사용할 캐릭터 인코딩이며, 저는 UTF-8을 사용했습니다.
2. FileUpload JSP 작성
3. FileUpload
4. FileDownload JSP 작성
5. FileDownload
public void fileDownload(HttpServletResponse response, FileVO fileVO) throws Exception {
String fileName = fileVO.getFileName();
String fileSaveName = fileVO.getFileSaveName();
String filePath = fileVO.getFilePath();
String fileLength = fileVO.getFileLength();
response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
response.setHeader("Content-Transfer-Encoding", "binary");
response.setHeader("Content-Type", "application/octet-stream");
response.setHeader("Content-Length", fileLength);
response.setHeader("Pragma", "no-cache;");
response.setHeader("Expires", "-1;");
OutputStream os = response.getOutputStream();
FileInputStream fis = new FileInputStream(filePath + fileSaveName);
int readCount = 0;
byte[] buffer = new byte[1024];
while((readCount = fis.read(buffer)) != -1) {
os.write(buffer, 0, readCount);
}
fis.close();
os.close();
}
'Spring > Spring' 카테고리의 다른 글
[Spring] 나만의 Spring 프로젝트 만들기 Step1. Maven 생성 (0) | 2019.12.22 |
---|---|
[Spring] Scheduler 세팅 및 사용하기 (0) | 2019.12.22 |
[Spring] Logback, log4jdbc를 이용한 시스템로그, DB로그 출력방법 (0) | 2019.08.30 |
[Spring] Aop 설정방법 알아보기 (0) | 2019.08.29 |
[Spring] 컨트롤러와 프론트 사이에서 값 전달하는 방법의 종류 (7) | 2019.08.03 |
댓글