[Spring] File Upload

2024. 9. 7. 02:01·Back-End/Back-End

[작성일: 2023. 05. 20]

 

File Upload 방식

  • <form> 태그를 이용하는 방식과 Ajax를 이용하는 두 가지 방식이 있음.

 

File Upload 폴더 생성

  • C:upload/temp

 

 

application.properties

  • multipart 부분 추가
  • file upload API
    • cos.jar : 2002년 이후 개발 종료되었으며 더 이상 사용하지 않을 것을 권장함.
    • commons-fileupload : 일반적으로 많이 활용, 서블릿 3.0 이전도 사용 가능
    • 서블릿 3.0 이상에서는 API 상에서 지원
# multipart
spring.servlet.multipart.enabled=true
spring.servlet.multipart.location=C:upload/temp
spring.servlet.multipart.max-file-size=40MB
spring.servlet.multipart.max-request-size=20MB
spring.servlet.multipart.file-size-threshold=100MB

 

 

UploadController.java

  • Ajax 방식으로 호출 시에는 결과를 기다리지 않기 때문에 제어권을 컨트롤러에 넘기지 않음.
@PostMapping("uploadFormAction")
	public void uploadFormPost(MultipartFile[] uploadFile, Model model){
    
}

@PostMapping("uploadAjaxAction")
	public void uploadAjaxPost(MultipartFile[] uploadFile, Model model){
    
}

 

 

개선사항

  1. 동일한 이름으로 파일 업로드가 수행되면 기존 파일이 사라짐.
    • 1단계 : 업로드 디렉토리에 년/월/일 디렉토리 생성
    • 2단계 : 동일 일자에 동일 이름인 파일에 대한 처리를 위해 특수 아이디(UUID) 기법 적용
    • Universally unique identifier : 범용 고유 식별자
    • 340,282,366,920,938,463,463,374,607,431,768,456개(10의 38제곱)
  2. 이미지 파일의 원본이 큰 경우 썸네일을 생성할 필요가 있음.
    • Thumbnailator 라이브러리 사용
    • pom.xml에 dependency 추가
  3. 이지피 파일과 일반 파일을 구분해서 다운로드 하거나 조회해야 함.
    • Files.probeContentType()을 활용하여 image/ , text/ 등의 타입을 구분할 수 있음.
    • image로 시작되면 image로 판단
    • checkImageType() 구현
  4. 첨부파일 해킹공격에 대비하기 위한 업로드 파일 확장자를 제한해야 함.
    • checkExtension()
    • fileName의 Regular Expression Check
    • fileSize Over Check

 

 

 

 

 

 

첨부파일 활용

  • 첨부파일을 활용하기 위한 VO(AttachFileVO) 적용
  • com.it.example.beans.vo에 VO 생성
  • uploadAjax.html에서 요청한 등록 결과를 돌려주기 위함.
  • uploadAjaxPost 변경
  • uploadAjax.html에서 이미지인 경우와 아닌 경우 처리 분리, 이미지인 경우에는 display 서비스를 호출하여 썸네일 이미지 수신
  • 이미지가 아닌 경우에는 사전에 준비된 attach.png를 사용
  • display 서비스를 위해서 getFile 메서드 추가

 

 

 

 

 

 

 

 

 

 


🐣 해당 게시글은 입문 개발자가 요약/정리한 글이므로 틀린 내용이나 오타가 있을 수 있습니다.

 

저작자표시 비영리 변경금지 (새창열림)
'Back-End/Back-End' 카테고리의 다른 글
  • [Spring] 댓글 조회, 삭제 기능 구현하기(+트랜잭션)
  • [Spring] 댓글창 목록 구현하기
  • [Spring] 댓글창 기능 구현하기
  • [Spring] 검색처리
뚜비
뚜비
1년차 백엔드&iOS 개발자의 감자 탈출 블로그 🥔🥔
  • 뚜비
    뚜비의 개발로그
    뚜비
  • 전체
    오늘
    어제
  • 글쓰기     관리
    • Devlog
      • Back-End
        • Java
        • Spring
        • JPA
        • HTTP
        • Security
        • Back-End
        • Front-End
      • 알고리즘
      • iOS
        • Swift
      • Database
      • Tips
        • Git & GitHub
        • A to Z
      • 프로젝트
      • 생각정리
  • 태그

    DB
    게시판만들기
    HTTP
    변수
    의존성주입
    Database
    html
    javascript
    백준
    자바스크립트
    sql
    생성자
    스프링
    알고리즘
    김영한
    Spring Security
    jsp
    객체
    Security
    JPA
    프로그래머스
    spring
    다형성
    성능최적화
    자바
    최주호
    데이터베이스
    Swift
    Java
    MVC
  • hELLO· Designed By정상우.v4.10.0
뚜비
[Spring] File Upload
상단으로

티스토리툴바