수업소개
이번 수업에서는 오픈소스 위지윅 에디터인 CKEditor을 이용해서 파일을 서버로 전송하고, 전송된 데이터를 CI의 upload 라이브러리 클래스로 받아서 저장하는 방법에 대해서 알아본다. 이 과정에서 위지윅 에디터를 적용하는 방법에 대해서도 익힐 수 있다. 순수 HTML을 이용해서 파일을 업로드 하는 방법은 CodeIgniter의 메뉴얼을 참고한다.
선행지식
Upload Class
초기화
CodeIgniter의 업로드 클래스는 더 적은 코드로 더 안전하게 파일을 전송 할 수 있는 방법을 제공하고 더 많은 경우에 대한 예외처리를 제공한다. 이 클래스를 초기화 할 때는 아래와 같이 한다.
// 사용자가 업로드 한 파일을 /static/user/ 디렉토리에 저장한다. $config['upload_path'] = './static/user'; // git,jpg,png 파일만 업로드를 허용한다. $config['allowed_types'] = 'gif|jpg|png'; // 허용되는 파일의 최대 사이즈 $config['max_size'] = '100'; // 이미지인 경우 허용되는 최대 폭 $config['max_width'] = '1024'; // 이미지인 경우 허용되는 최대 높이 $config['max_height'] = '768'; $this->load->library('upload', $config);
파일저장
upload 클래스의 핵심 메소드는 do_upload이다. 이것을 실행하면 서버로 전송된 파일의 보안 취약점을 점검하고 문제가 없으면 지정된 디렉토리로 파일을 이동시킨 후에 실행 결과를 리턴한다. 아래와 같이 사용한다.
$field_name = "some_field_name"; $this->upload->do_upload($field_name)
$file_name 값은 file type의 폼에서 지정한 name 값과 일치해야 한다. 예를들면 아래와 같아야 한다.
<input type="file" name="some_field_name" />
CKEditor
CKEditor는 위지윅 에디터다. 위지윅(WYSIWYG)이란 What You See Is What You Get 한국어로는 보는데로 얻는다는 뜻으로, HTML 코드 없이 포맷을 편집할 수 있는 기능을 제공하는 에디터다. CKEditor는 무료고 오픈소스로 사용할 수 있는 대표적인 위지윅 에디터다.
CKEditor을 설치하기 위해서는 다운로드 받아야 한다. 아래 주소를 방문해서 최신버전을 다운로드 받자.
다운받은 파일을 /static/lib 디렉토리에 풀고 위지윅 에디터가 필요한 페이지에 textarea를 만든 후에 CKEditor 파일을 페이지에 로드한다. 그리고 textarea와 CKEditor를 자바스크립트로 연결해주면 간단하게 설치가 완료된다. 아래는 최소한의 코드다.
<html> <head> <script src="/static/lib/ckeditor/ckeditor.js"></script> </head> <body> <form> <textarea name="description"> </textarea> <script> CKEDITOR.replace( 'description' ); </script> </form> </body> </html>
이미지 업로드 기능 활성화
CKEditor에서 이미지 업로드 기능을 활성화시키기 위해서는 CKEditor를 textarea에 연결할 때 옵션 값을 전달해야 한다. 위의 코드를 아래와 같이 수정한다.
<script> CKEDITOR.replace( 'description', { filebrowserUploadUrl: '/topic/upload' }); </script>
툴바 중에 이미지 버튼을 누르고 업로드 탭을 선택한 후에 파일을 전송하면 /topic/upload로 파일이 전송된다. /topic/upload는 CKEditor가 전송한 파일을 받아서 보안 취약점을 점검한 후에 문제가 없으면 파일을 저장한다.
업로드 후 처리
업로드 정보를 받아서 처리한 /topic/upload 는 CKEditor에 업로드한 파일을 삽입 할 수 있도록 미리 약속된 callback 함수를 호출해야 한다. callback의 형식은 아래와 같다.
<script type='text/javascript'>window.parent.CKEDITOR.tools.callFunction('콜백의 식별 ID 값', '파일의 URL', '전송완료 메시지')</script>
- 콜백의 식별 ID 값 : CKEditor가 파일을 전송할 때 자동으로 'CKEditorFuncNum'라는 GET 타입의 데이터를 전송한다. 이 값을 그대로 사용하면 된다.
- 파일의 URL : 저장된 파일에 접근 할 수 있는 URL. CKEditor는 이 값을 이용해서 이미지를 본문에 저장한다.
- 전송완료 메시지 : 전송된 결과를 사용자에게 보여주는 메시지
예제
예제 코드가 많아짐에 따라서 본문에 포함시키기가 어려워지고 있다. 따라서 앞으로는 github의 링크를 걸도록 하겠다.
태그
- 태그명 : upload_ckeditor2
- 태그주소 : https://github.com/egoing/codeigniter_codeingeverbody/tree/upload_ckeditor2