웹마스터 팁
파일첨부 컨트롤러에 관하여 (첨부파일이 문자열이나, 인코딩되어있는 이미지 등)
2015.01.16 14:39
이게 팁이라면, 팀일수 있지을수 있어서, 그리고 혹시 저처럼 개발하기전 시간 소요를 줄이기 위해서 글을 남겨 봅니다.
XE 에 첨부파일을 올리려 하면, 자체 컨트롤러가 좀 까다로운게 사실입니다. 기회가되어 ( 의뢰한분이 커스터마이징을 원하셔서)
첨부파일을 올리는 부분을 커스터 마이징하게 됐는데요, XE File 컨트롤러를 커스터 마이징 하다보니 느낀건, 이렇게 고치다 보면, 엔진 자체가 업그레이드 되거나 혹 다른 모듈이나 애드온이 같이 연동되었을시 애러가 날수 있다는 생각이 많이 들었습니다.
그래서 예전부터 사용하던 좀 고전적인 방법을 소개해 드리려 합니다.
개발자 분들에게는 굉장히 쉬운 팁일수 있지만, 말그대로 TIP일 뿐입니다.
첨부파일을 외부에서 받아 오실때 예를 들어 인코딩 되어있는 이미지라던지, Base64 파일들 같은 경우 바로 XE에 첨부 할수 없습니다. 그래서 할수 있는 방법으로는 FORM INPUT 에 히든으로 받아와서 AJAX 로 POST 하게 되는데요, AJAX 에서 .php 를 쓰셔서 파일에 맏게 디코드 하신후 XE이와 별개의 폴더에 저장하신후에 그 파일이나, 이미지를 불러와서 게시판 밑부분에 삽입하는 방식인데요.
예를 들면:
form id="uploadForm" action="upload.php" method="post">
<input type="text" name="usrname"><br>
<input type="submit" value="Submit">
</form>
같이 꾸며주시면 됩니다. 각, 게시판에 원하시는 폼데이터에 같이 사용하시고요
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script type="text/javascript">
$(document).ready(function (e) {
$("#uploadForm").on('submit',(function(e) {
e.preventDefault();
$.ajax({
url: "upload.php",
type: "POST",
data: new FormData(this),
contentType: false,
cache: false,
processData:false,
success: function(data)
{.................................................................................
어디까지나 예시를 들어 놓은겁니다.
제가 말하고자 하는건, 처음부터 파일업로드 (외부에서 파일을 끝어올경우) 생각하실 경우가 있다면, XE컨트롤러 부분보다는,
파일을 따로 저장하여 불러오고 -> 불러온 파일을 -> 게시판에 붙이는게 나중을 위해서나, XE의 코어를 건드리지 않아서, 괜찮아 보입니다. 어차피 코어는 계속 바뀌기에 위험한 개인적으로 실용성 없는 작업이라 생각하고요.
저는 XE컨트롤러를 건드려보다가,,, 결국 새로운 컨트롤러 하나를 만들게 되었는데요... 결론은 저도 파일을 따로저장하여 붙였습니다. 갑자기 돌아보니 시간이 아깝다는 생각에 TT 그냥 글 남기고 갑니다.
XE에 있는 meta blog api 던가 blog api 애드온을 쓰면 xml 형식으로 외부에서 글쓰기가 가능한데요 파일의 경우 base64형태로 입력하는것으로 기억되네요.
오래전에 작업했던 거라서....
암튼 XE 코어 수정 없이 안된다고 단정지으셔서 꼭 방법이 없는건 아니라고 말씀드리고 싶었습니다 :)
말씀하시는 방법이 나쁘다는건 아닙니다.