[스프링부트] 28. File Upload

문정준's avatar
Apr 22, 2025
[스프링부트] 28. File Upload
 

파일 업로드

  • boundary가 필요 (이름은 겹치면 안됨)
 
POST /upload HTTP/1.1 Content-Type: multipart/form-data; boundary=----juminTrump ----juminTrump Content-Disposition: form-data; name="file1"; filename="image.jpg" Content-Type: image/jpeg ----juminTrump Content-Disposition: form-data; name="file2"; filename="a.png" Content-Type: image/png ----juminTrump Content-Disposition: form-data; name="username" ssar ----juminTrump Content-Disposition: form-data; Content-Type: text/plain; charset=UTF-8

UUID 난수를 더해서 저장 (이름 충돌 방지)

파일 업로드 (외부 이미지, 파일의 경우)는 서버 내부 파일에 저장하지 말 것

  • 서버 과부하, 용량 과다, 속도 저하

spring은 외부 파일 접근 권한이 없음 (절대경로 사용 불가)

  • registry.addResourceHandler("url") : 저장 요청을 받을 url 패턴
  • registry.addResourceLocations("file:url") : 실제 저장 경로 지정 (절대경로 지정 가능) : 권한 부여
 

1. file 프로토콜 기본 문법

protocol://hostname/filepath file://localhost/파일경로
 

2. windows 시스템 예시

  • c:\server\img 폴더 내부를 찾고 싶다면?
  • windows 시스템이어서 파일경로는 역 슬래시를 사용 (\)
  • 리눅스 or 맥에서는 슬래시를 사용 (/)
내부 로컬 컴퓨터에서 찾고 싶다면? hostname은 ip주소를 의미한다. 즉, localhost file://localhost/c:\server\blog\img\a.jpg
 
  • hostname은 생략 가능
    • file://localhost/
file:///c:\server\blog\img\a.jpg
 
file:/c:\server\blog\img\a.jpg
 
  • // 를 생략한 상태에서 상대 경로를 찾고 싶다면?
    • 상대 경로는 자바에 맞게 경로 지정이 가능하기 때문에 / 사용
file:./img/a.jpg 이 경우에는 프로젝트명 blog 일 때, blog 프로젝트 내부에 img 폴더에 a.jpg를 찾는다. 즉 절대 경로가 c:\server\blog\img\a.jpg 라면 ./img는 blog 프로젝트 내부의 img 폴더이다.
 
Share article

sxias