Notice
Recent Posts
Recent Comments
Link
- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- DBeaver
- 환경번수
- 사용법
- SVN
- bekjoon
- subversion
- 자바
- tomcat-users.xml
- 메뉴얼
- 백준 JAVA
- poll scm
- java
- jaekjoon java
- linux
- 백준
- 제수가 0입니다
- jenkins
- 백준 java jaekjoon JAVA
- boj
- baekjoon
- 서버 접근
- ora-01476
- rocky linux
- PostgreSQL
- jsonb select
- Rocky Linux 9
- 1773번
- putty
- javascript
- available plugins
Archives
기록하는 개발자
CKEditor5 메뉴얼 본문
CKEditor 이미지를 업로드 했을때 지정한 경로에 이미지를 저장하고 화면에 띄워주는 기능을 구현했습니다.
1. CKEditor 다운로드
2. ckEditorimageSample.js 생성
class ckEditorImageSample {
constructor(loader) {
this.loader = loader;
}
upload() {
return this.loader.file.then( file => new Promise(((resolve, reject) => {
this._initRequest();
this._initListeners( resolve, reject, file );
this._sendRequest( file );
})))
}
_initRequest() {
const xhr = this.xhr = new XMLHttpRequest();
xhr.open('POST', '<http://localhost:8081/vComponent/system/editor/editorImage.do>', true);
xhr.responseType = 'json';
}
_initListeners(resolve, reject, file) {
const xhr = this.xhr;
const loader = this.loader;
const genericErrorText = '파일을 업로드 할 수 없습니다.'
xhr.addEventListener('error', () => {reject(genericErrorText)})
xhr.addEventListener('abort', () => reject())
xhr.addEventListener('load', () => {
const response = xhr.response
if(!response || response.error) {
return reject( response && response.error ? response.error.message : genericErrorText );
}
setTimeout(() => {
resolve({
default: response.result.url //업로드된 파일 주소
})
}, 5000);
})
}
_sendRequest(file) {
const data = new FormData()
data.append('upload',file)
this.xhr.send(data)
}
}
3. EditorController 생성
private String getServerIp() {
InetAddress local = null;
try {
local = InetAddress.getLocalHost();
} catch (UnknownHostException e) {
e.printStackTrace();
}
if (local == null) {
return "";
} else {
String ip = local.getHostAddress();
return ip;
}
}
//CKEditor 이미지 업로드
@RequestMapping(value = "/editorImage.do")
public ModelAndView image(@RequestParam Map<String, Object> map, MultipartHttpServletRequest request)
throws Exception {
ModelAndView mv = new ModelAndView("jsonView");
Map<String, Object> resultMap = new HashMap<String, Object>();
String imageServerPath = null; //서버경로
String savePath= null; //저장경로
String originalImagename= null; //원본이름
String imageName= null; //저장본이름
String extension= null; //확장자
List<MultipartFile> imageList = request.getFiles("upload");
for (MultipartFile mf : imageList) {
if (imageList.get(0).getSize() > 0) {
originalImagename = mf.getOriginalFilename(); // 원본 파일 명
extension = FilenameUtils.getExtension(originalImagename);
imageName = "img_" + UUID.randomUUID() + "." + extension;
// ex)String path = "D:\\\\github\\\\src\\\\main\\\\webapp\\\\images\\\\";
savePath = EgovProperties.getProperty("Globals.EditerImagePath"); // 서버가 가지고있는 프로젝트 경로로 지정해야합니다.
File imageUpload = new File(savePath + imageName);
try {
mf.transferTo(imageUpload);
} catch (IllegalStateException | IOException e) {
e.printStackTrace();
}
}
}
4. Editor 연결
<!-- CKEditor -->
<script src="<c:url value='/js/ckeditor5/build/ckeditor.js'/>"></script>
<script src="<c:url value='/js/ckeditor5/build/ckEditorImageSample.js'/>"></script>
<!--------------------------------------------------------- CKEditer ---------------------------------------------------------->
<div class="card-header py-3 d-flex flex-row align-items-center justify-content-between">
<h6 class="m-0 font-weight-bold text-primary">CKEditer</h6>
</div>
<div class="card-body">
<div id="quillEditor"></div>
<div class="col-sm-12">
<textarea class="form-control" rows="5" id="CKEditer" name="CKEditer" maxlength="1000" required="required"></textarea>
</div>
</div>
</div>
/********************************************************CKEditer********************************************************/
<script type="text/javascript">
/*에디터 생성*/
ClassicEditor
.create( document.querySelector( '#CKEditer'), {
extraPlugins: [MyCustomUploadAdapterPlugin],
toolbar: { //사용 툴바
items: [
'heading',
'|',
'bold',
'italic',
'link',
'bulletedList',
'numberedList',
'|',
'outdent',
'indent',
'|',
'imageUpload',
'blockQuote',
'insertTable',
'mediaEmbed',
'undo',
'redo'
]
},
language: 'ko',
licenseKey: '',
} )
.then( editor => {
window.editor = editor; //에디터 선언
} )
.catch( error => {
console.error( error );
} );
function MyCustomUploadAdapterPlugin(editor) { //이미지 이벤트
editor.plugins.get('FileRepository').createUploadAdapter = (loader) => {
return new ckEditorImageSample(loader);
}
}
</script>
참고
개인적으로 정리한 내용을 간단하게 풀어 작성했습니다. 이해가 안가는 부분은 댓글 남겨주시면 설명해드리겠습니다. |
'Open Source' 카테고리의 다른 글
amCharts 5 계층형 Treemap 메뉴얼 (0) | 2022.11.23 |
---|---|
MyBatis resultMap collection 사용법 [1:N select] (0) | 2022.07.29 |
summernote 메뉴얼 (0) | 2021.12.05 |
Docker 설정 메뉴얼 (0) | 2021.12.05 |
Comments