개발 Q&A

제목 에디터로 추가되는 이미지 관리
카테고리 PHP
글쓴이 아이와사 작성시각 2016/11/30 11:58:12
댓글 : 6 추천 : 0 스크랩 : 0 조회수 : 16320   RSS

에디터에 이미지 삽입 시

ajax로 이미지업로드 먼저시키고 src값을 리턴해오는 방식으로 되던데

이미지 업로드만 하고 글저장을 안하고 브라우저를 꺼버릴 경우

이미 업로드된 이미지는 쓰레기데이터로 용량만 차지할텐데

여러분은 이 문제 어떻게 처리하시는지 궁금합니다..

 다음글 ajax로 동기로 하는 방법에 대해 문의 (2)
 이전글 하나의뷰페이지에서 특정부분에서만 jqeury가 작동할수... (2)

댓글

배강민 / 2016/11/30 12:45:38 / 추천 0

TapBBS는 해당 처리에 대한 고민이 되어있으니 해당 코드를 참고해보셔도 좋을듯합니다.

http://www.tapbbs.com/bbs/view/download?idx=179&lists_style=

관리자체험에서 admin / 111 로 들어가시면 게시판 > 첨부파일정리가 해당 부분입니다.

개발당시 이런저런 고민과 시도를 해보다가 정한 부분인데,

위지윅에서 이미지를 등록할때마다 임시 DB에 저장해두고, 실제 submit시에는 진짜 DB에 저장하고, 특정 기준을 조건으로 비교해서 지우도록 합니다.

TapBBS는 일반적인 웹호스팅에서도 동작하게 하려는 취지로 개발된거라서 cron등의 콘솔 로직은 없고 관리자가 주기적으로 지우도록까지만 했습니다.

최초에는 파일폴더의 리스트를 뽑아내고, DB값과 비교해서 지우도록 했었는데, 파일이 너무 많아지면, 너무 느려서 써먹질 못하겠어서 중간 DB단계를 두도록 수정했던 히스토리가 있습니다.

fakepath, html5의 이미지관련 부분들을 이용하는 방법 등도 있는듯 하지만, 당시에는 위 방식밖에 생각나지 않았었네용.ㅎ

변종원(웅파) / 2016/11/30 12:53:53 / 추천 0

db에 업로드된 파일명을 기록하는 경우엔 db의 파일명과 저장 디렉토리를 비교하여 db에 없는 파일명을 삭제하는 방법도 있습니다. (위에 기술되어 있네요)

날짜별로 디렉토리를 따로 사용할 경우엔 시도해볼만 합니다. 그날치 디렉토리의 내용만 정리하면 됩니다.

아이와사 / 2016/11/30 14:11:36 / 추천 0

@배강민

아하..임시DB 좋은방법이네요

소스가 조금 복잡해질것같긴한데 고려해볼만한 방법같습니다.

답변 감사합니다!

 

아이와사 / 2016/11/30 14:12:38 / 추천 0

@변종원(웅파)

CI보드 이미지저장을 월별/일별 폴더로 정리해놓던데 이유가 이것때문이였나보네요

답변 감사합니다!

 

배강민 / 2016/11/30 15:20:12 / 추천 0

TapBBS도 파일을 날짜폴더로 만들고 있어서 그로 비교하려고 고민도 하긴 했었는데,

콘솔에서 주기적으로 실행되는 cronjob을 만들 수 없는 상황이라면,

그 비교를 위해서 예를 들어 최근 일주일의 날짜폴더를 빼고 모든 날짜폴더를 다 뒤질 수밖에 없어서 스킵했던 기억이 있네요.

터푸 / 2016/12/01 03:24:08 / 추천 0

수준 떨어지는 답변인 것 같은데 제가 쓰는 방법을 말씀 드려 볼께요

일단은 폼에서 글쓰기 서브밋이 되기 전에 모든 이미지 업로드는 

/documentRoot/udir/tmp/20161111/some_image_name 으로 업로드 합니다.

폼이 서브밋되면 그 로직에서 실제 저장 디렉토리로

/documentRoot/udir/attach_image/20161111/bbs_uid_name  moving 합니다.

클론 또는 특정 실행 파일에서 오늘 보다 2~3일 정도 지난 임시 디렉토리를 날립니다.

rm -fR /documentRoot/udir/tmp/20161111/ <- 해당일에 업로드된 모든 가비지가 삭제 됩니다.

물론 임시 디렉토리를 자동으로 생성하는 어떤 로직은 필요하겠죠

서브밋된 게시물을 삭제 할때 이미지가 삭제 되도록 하는 것도 비슷합니다.

위에 게시물이 등록된 날짜와 관련된 디텍로리로 이미지를 무빙했을건데 이미지 이름을

BBS.PK 값이 들어간 어떤 특정 이름으로 저장했다면

rm -f "/documentRoot/udir/attach_image/BBS_REGDATE/bbs_uid_*" 

위와 같은 식으로 어렵지 않게 처리 합니다.

다 아실만한 수준 떨어지는 처리 방식이지만 서버에 가비지를 남기지 않는 

이런 쉬운 방법도 있으니 참고 하세요