CKEditor .net core 이미지 드래그 앤 드

CKEditor .net core 이미지 드래그 앤 드

작성일 2024.01.11댓글 0건
    게시물 수정 , 삭제는 로그인 필요


CKEditor를 .net core 2.1에 적용을 했는데, 이미지를 드래앤 드롭으로 삽입하니까 다음과 같은 알림이 뜹니다. 이 알림을 없애고 싶은데 방법 좀 가르쳐 주세요

<View>
  CKEDITOR.replace('editor1', {
        filebrowserImageUploadUrl: '/Drafts/UploadImage?responseType=json',
        filebrowserUploadMethod: 'form',
        removeDialogTabs : 'image:Upload',
        filebrowserUploadHeaders: {
            'X-CSRF-TOKEN': 'your-csrf-token', // CSRF 토큰 추가 (선택 사항)
        },
        on: {
            fileUploadResponse: function (evt) {
                // 이미지 업로드 후 처리
                var xhr = evt.data.fileLoader.xhr;
                var response = JSON.parse(xhr.responseText);

                if (response && response.success) {
                    var imageUrl = response.imagePath;
                    CKEDITOR.instances['editor1'].insertHtml('<img src="' + imageUrl + '" alt="Your Alt Text">');
                } else {
                    alert("이미지 업로드에 실패했습니다.");
                    console.error(response.error);
                }
            },
            contentDom: function (event) {
                var editor = event.editor;

                // 내용이 변경될 때마다 호출되는 이벤트
                editor.document.getBody().on('keydown', function (event) {
                    // Backspace 키가 눌렸을 때
                    if (event.data.getKey() === 8 || event.data.getKey() === 46) {
                        handleBackspaceKey(editor);
                    }
                });
              
            }
        }
      
    });

    function handleBackspaceKey(editor) {
        var selection = editor.getSelection();
        var range = selection.getRanges()[0];

        // Delete 또는 Backspace 키를 눌렀을 때 현재 커서 위치에 이미지가 있는지 확인
        range.shrink(CKEDITOR.SHRINK_TEXT);
        var startNode = range.startContainer.getChild(range.startOffset - 1);
        var endNode = range.startContainer.getChild(range.endOffset);

        // 삭제된 노드가 이미지인 경우
        if ((startNode && startNode.getName() === 'img') || (endNode && endNode.getName() === 'img')) {
            // 삭제된 노드를 찾아서 이미지를 삭제
            var node = startNode || endNode;
            var imageUrl = node.getAttribute('src');

            // 서버에 이미지 삭제 요청 보내는 함수
            deleteImageOnServer(editor, imageUrl);
        }
    }

    function deleteImageOnServer(editor, imageUrl) {
        $.ajax({
            type: 'POST',
            url: '/Drafts/DeleteImage',
            data: { imageUrl: imageUrl },
            success: function (response) {
                if (response.success) {
                    // 서버에서 이미지 삭제가 성공하면 에디터에서도 이미지 제거
                    var imageElement = editor.document.findOne('img[src="' + imageUrl + '"]');
                    if (imageElement) {
                        imageElement.remove();
                    }
                } else {
                    alert('이미지 삭제 실패.');
                }
            },
            error: function () {
                alert('서버 오류: 이미지 삭제 실패.');
            }
        });
    }

<Controller>
 [HttpPost]
        public ActionResult UploadImage(IFormFile upload)
        {
            try
            {
                // 이미지 확장자 및 MIME 타입 확인
                string[] supportedExtensions = { ".jpg", ".jpeg", ".png", ".gif" };
                string fileExtension = Path.GetExtension(upload.FileName).ToLower();

                if (!supportedExtensions.Contains(fileExtension) || !upload.ContentType.StartsWith("image/"))
                {
                    return Json(new { success = false, message = "지원되지 않는 이미지 형식입니다." });
                }

                string path = Path.Combine("uploads", DateTime.Now.ToString("yyyy-MM-dd"));
                string uploadPath = Path.Combine(_hostingEnvironment.WebRootPath, "uploads", DateTime.Now.ToString("yyyy-MM-dd"));

                DirectoryInfo di = new DirectoryInfo(uploadPath);
                if (di.Exists == false)
                {
                    di.Create();
                }

                string uniqueFileName = Guid.NewGuid().ToString() + fileExtension;
                string filePath = Path.Combine(uploadPath, uniqueFileName);

                using (var stream = new FileStream(filePath, FileMode.Create))
                {
                    upload.CopyTo(stream);
                }

                // 성공적으로 업로드된 경우 클라이언트에 이미지 경로 반환
                string imageUrl = Path.Combine(path, uniqueFileName);
                imageUrl = imageUrl.Replace('\\', '/');
                return Json(new { success = true, imagePath = "/"+imageUrl });
            }
            catch (Exception ex)
            {
                return Json(new { success = false, message = ex.Message });
            }
        }
        [HttpPost]
        public IActionResult DeleteImage(string imageUrl)
        {
            try
            {
                // 이미지 경로를 기반으로 실제 경로 구성
              string physicalPath = Path.Combine(_hostingEnvironment.WebRootPath, imageUrl.TrimStart('/'));

                // 이미지 파일 존재 여부 확인 후 삭제
                if (System.IO.File.Exists(physicalPath))
                {
                    System.IO.File.Delete(physicalPath);
                    return Json(new { success = true });
                }
                else
                {
                    return Json(new { success = false, message = "이미지를 찾을 수 없습니다." });
                }
            }
            catch (Exception ex)
            {
                return Json(new { success = false, message = ex.Message });
            }
        }


#ckeditor .net #ckeditor.net.dll free download #ckeditor .net mvc #ckeditor.net.dll download #ckeditor.net nuget #ckeditor net core mvc #ckeditor.net reference #ckeditor .net core #ckeditor in asp.net c# #ckeditor 5 asp.net mvc

이런 SF류의 영화 추천좀 부탁드립니다

... (The Core, 2003) 미국, 영국 | SF, 액션, 스릴러, 드라마 | 130... (닥터 카루더스) 국내 등급 : 12세 관람가 해외 등급 : PG-13 공식 홈페이지 : 해외 http://www.spacecowboys.net...

이 컴퓨터 사양에 대한것좀..

... Intel Core (Yonah) / Core 2 (Merom) 아니오 (Intel Pentium 4) 칩세트: Intel... 3000 MSN Messenger - Internet Information Services (IIS) [ TRIAL VERSION ] .NET...

워드프로세서 1급 필기 요점정리...

... 워 프 로 세 서 1 급 필 기 핵 심 요 점 정 리 ( 2 0 0 7... 제작된 이미지 데이터의 집합 - 저장(Save)... 플러그 플레이(PnP) :하드웨어설치시해당하드웨어를사용하기위...