[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
      • 프로젝트
      • 생각정리
  • 태그

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

티스토리툴바