기록 > 기억
[File upload] 파일 업로드 경로 프로젝트 외부에 두기 본문
● 에러 발생
포트폴리오 작업 중에 로컬에서 개발 서버로 war 파일을 배포 했음
그런데 업로드했던 이미지들이 엑스박스가 뜸
● 에러 발생 원인
로컬에서 개발 서버로 배포 할 때, 개발 서버에 있던 배포 본을 지우고 새로 배포하는데
이 때 개발 서버에 있던 업로드 파일들은 삭제되고 DB에는 파일 정보만 남아 이미지 엑스박스가 뜬것임!
● 해결 방안
프로젝트 외부에 파일 업로드 폴더를 따로둬서 톰캣 clean 또는 배포 시에 파일 삭제 방지
1) 프로퍼티 작성 (파일업로드 경로)
upload.path=D:/workspace/upload/
2) 프로퍼티 파일 읽어 해당 경로로 파일 업로드
① 프로젝트 내부에 파일 업로드의 경우 이미지 가져옴
src/main/webapp/upload/file.png → <img src="<c:url value='/upload/file.png'/>">
② 프로젝트 외부에 파일 업로드의 경우 보안상 이미지 못 가져옴 (웹에서 로컬폴더로 접근불가)
<img src="D:/workspace/upload/file.png"> → Not allowed to load local resource
3) server.xml 파일 업로드 경로 context 등록
<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">
<Context docBase="moviestar" path="/moviestar" reloadable="true" source="org.eclipse.jst.jee.server:moviestar"/>
<Context docBase="D:/workspace/upload/" path="/moviestar/upload" reloadable="true" />
</Host>
① /moviestar가 프로젝트 contextPath
② D:/workspace/upload 폴더를 /moviestar/upload 라는 URL로 접근하겠다는 의미
ex) D:/workspace/upload/file.png → http://localhost:8080/moviestar/upload/file.png
'에러일지' 카테고리의 다른 글
[MySQL] Alias 안먹힐 때 (0) | 2021.10.12 |
---|---|
[MySQL] Public Key Retrieval is not allowed (0) | 2021.10.07 |
[JavaScript] var name = []; name의 자료형이 string? (0) | 2021.09.16 |
[Oracle] java.sql.SQLRecoverableException: IO Error: Connection reset by peer (0) | 2017.11.21 |
[jQuery] 동적으로 추가한 요소 이벤트 먹통 (0) | 2017.06.30 |