파일 업로드
- 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:// 에서 // 생략 가능
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