springboot 에서 ueditor 업로드 기능 의 실현 및 문제점

머리말
본 고 는 주로 springboot 에서 ueditor 업로드 기능 의 실현 과 발생 하 는 문제 에 대한 처 리 를 썼 다.
전체 프로젝트 구조 전시

Springboot 통합 ueditor 및 업로드 기능 실현 의 구체 적 인 절차
1.ueditor-1.4.3 다운로드
이것 은 홈 페이지 에서 다운로드 하면 됩 니 다.그러나 utf-8 버 전의 자원 이 없 는 것 같 습 니 다.소스 버 전 은 몇 번 이나 중단 되 었 습 니 다.결국 저 는 제3자 에서 내 렸 습 니 다.
2.테스트 페이지 새로 만 들 기
ueditor 의 루트 디 렉 터 리 아래 에 index.html 가 있 습 니 다.이 디 렉 터 리 를 사용 하면 됩 니 다.원본 코드 는 다음 과 같 습 니 다.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
  <title>  demo</title>
  <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
  <!--  config.json             -->
  <script type="text/javascript" charset="utf-8" src="/ueditor/ueditor.config.js"></script>
  <script type="text/javascript" charset="utf-8" src="/ueditor/ueditor.all.js"> </script>
</head>
<body>
<div>
  <h1>UEditor  </h1>
  <script id="editor" type="text/plain" style="width:100%;height:330px;"></script>
</div>
<div id="btns">
  <div>
    <button οnclick="getAllHtml()">    html   </button>
    <button οnclick="getContent()">    </button>
    <button οnclick="setContent()">    </button>
    <button οnclick="setContent(true)">    </button>
    <button οnclick="getContentTxt()">     </button>
    <button οnclick="getPlainTxt()">         </button>
    <button οnclick="hasContent()">       </button>
    <button οnclick="setFocus()">        </button>
    <button οnmοusedοwn="isFocus(event)">         </button>
    <button οnmοusedοwn="setblur(event)" >       </button>
  </div>
  <div>
    <button οnclick="getText()">         </button>
    <button οnclick="insertHtml()">       </button>
    <button id="enable" οnclick="setEnabled()">    </button>
    <button οnclick="setDisabled()">    </button>
    <button οnclick=" UE.getEditor('editor').setHide()">     </button>
    <button οnclick=" UE.getEditor('editor').setShow()">     </button>
    <button οnclick=" UE.getEditor('editor').setHeight(300)">     300         </button>
  </div>
  <div>
    <button οnclick="getLocalData()" >       </button>
    <button οnclick="clearLocalData()" >     </button>
  </div>
</div>
<div>
  <button οnclick="createEditor()">
       </button>
  <button οnclick="deleteEditor()">
       </button>
</div>
<script type="text/javascript">
  //      
  //        getEditor          ,              ,    UE.getEditor('editor')         
  var ue = UE.getEditor('editor');
  function isFocus(e){
    alert(UE.getEditor('editor').isFocus());
    UE.dom.domUtils.preventDefault(e)
  }
  function setblur(e){
    UE.getEditor('editor').blur();
    UE.dom.domUtils.preventDefault(e)
  }
  function insertHtml() {
    var value = prompt('  html  ', '');
    UE.getEditor('editor').execCommand('insertHtml', value)
  }
  function createEditor() {
    enableBtn();
    UE.getEditor('editor');
  }
  function getAllHtml() {
    alert(UE.getEditor('editor').getAllHtml())
  }
  function getContent() {
    var arr = [];
    arr.push("  editor.getContent()            ");
    arr.push("   :");
    arr.push(UE.getEditor('editor').getContent());
    alert(arr.join("
")); } function getPlainTxt() { var arr = []; arr.push(" editor.getPlainTxt() "); arr.push(" :"); arr.push(UE.getEditor('editor').getPlainTxt()); alert(arr.join('
')) } function setContent(isAppendTo) { var arr = []; arr.push(" editor.setContent(' ueditor') "); UE.getEditor('editor').setContent(' ueditor', isAppendTo); alert(arr.join("
")); } function setDisabled() { UE.getEditor('editor').setDisabled('fullscreen'); disableBtn("enable"); } function setEnabled() { UE.getEditor('editor').setEnabled(); enableBtn(); } function getText() { // , getText , , var range = UE.getEditor('editor').selection.getRange(); range.select(); var txt = UE.getEditor('editor').selection.getText(); alert(txt) } function getContentTxt() { var arr = []; arr.push(" editor.getContentTxt() "); arr.push(" :"); arr.push(UE.getEditor('editor').getContentTxt()); alert(arr.join("
")); } function hasContent() { var arr = []; arr.push(" editor.hasContents() "); arr.push(" :"); arr.push(UE.getEditor('editor').hasContents()); alert(arr.join("
")); } function setFocus() { UE.getEditor('editor').focus(); } function deleteEditor() { disableBtn(); UE.getEditor('editor').destroy(); } function disableBtn(str) { var div = document.getElementById('btns'); var btns = UE.dom.domUtils.getElementsByTagName(div, "button"); for (var i = 0, btn; btn = btns[i++];) { if (btn.id == str) { UE.dom.domUtils.removeAttributes(btn, ["disabled"]); } else { btn.setAttribute("disabled", "true"); } } } function enableBtn() { var div = document.getElementById('btns'); var btns = UE.dom.domUtils.getElementsByTagName(div, "button"); for (var i = 0, btn; btn = btns[i++];) { UE.dom.domUtils.removeAttributes(btn, ["disabled"]); } } function getLocalData () { alert(UE.getEditor('editor').execCommand( "getlocaldata" )); } function clearLocalData () { UE.getEditor('editor').execCommand( "clearlocaldata" ); alert(" ") } </script> </body> </html>
3.업로드 에 필요 한 jar 패키지 도입

<dependency>
 <groupId>com.gitee.qdbp.thirdparty</groupId>
 <artifactId>ueditor</artifactId>
 <version>1.4.3.3</version>
</dependency>
<dependency>
 <groupId>commons-codec</groupId>
 <artifactId>commons-codec</artifactId>
</dependency>
<dependency>
 <groupId>commons-fileupload</groupId>
 <artifactId>commons-fileupload</artifactId>
 <version>1.3.1</version>
</dependency>
<dependency>
 <groupId>commons-io</groupId>
 <artifactId>commons-io</artifactId>
 <version>2.5</version>
 <scope>compile</scope>
</dependency>
<dependency>
 <groupId>org.json</groupId>
 <artifactId>json</artifactId>
</dependency>
4.새로 업로드 한 파일 은 디 렉 터 리 폴 더 를 저장 합 니 다.

그 중의 config.json 은 ueditor-1.4.3 폴 더 에서 복사 되 었 습 니 다.기본 업로드 파일 경 로 는 config.json 이 있 는 디 렉 터 리 이 고 springboot 에서 imagePathFormat 을 설정 해 보 았 지만 소 용이 없 었 습 니 다.
5.새로 만 든 Ueditor Controller
ueditor.json 프로필 을 읽 고 업로드 방법 을 실현 하 는 데 사 용 됩 니 다.

import com.baidu.ueditor.ActionEnter;
import org.springframework.stereotype.Controller;
import org.springframework.util.ClassUtils;
import org.springframework.web.bind.annotation.RequestMapping;
 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;
 
/**
 *         
 *   1:config.json           (imageMaxSize)        js       ,        
 *   2:  ueditor.jar        
 *   3:config.json imageUrlPrefix    :"imageUrlPrefix": "/fileupload/ueditor"
 *   3:config.json imagePathFormat    :"imagePathFormat": "/image/{yyyy}{mm}{dd}/{time}{rand:6}"
 *   4:imageUrlPrefix + imagePathFormat           
 *
 * zkh
 * 2019 11 14  9:09
 */
@Controller
public class UeditorController {
 
  // /ueditor/jsp/config.json        ,          config.json      
  private String configJsonParentPath = ClassUtils.getDefaultClassLoader().getResource("").getPath() + "static/fileupload/ueditor";
 
  /**
   * UEditor      get    serverUrl  ,     action=config   UEditor      
   *   :  ueditor.jar   ActionEnter  ,               ,  ActionEnter        
   */
  @RequestMapping("ueditor")
  public void getEditorConfig(HttpServletRequest request, HttpServletResponse response, String action) {
    response.setContentType("application/json");
    try {
      String exec = new ActionEnter(request, configJsonParentPath).exec();
      if(action!=null && (action.equals("listfile") || action.equals("listimage"))) {
        exec = exec.replace(configJsonParentPath.substring(1), "/");
      }
      PrintWriter writer = response.getWriter();
      writer.write(exec);
      writer.flush();
      writer.close();
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}
주석 을 주의 깊 게 보다
6.이어서 우 리 는 ueditor.config.js 의 server Url 을 우리 가 5 단계 에 있 는 contrller 로 설정 해 야 합 니 다.다음 과 같 습 니 다.

7.마지막 으로 config.json 에 우리 가 올 린 구체 적 인 세부 사항 을 설정 해 야 합 니 다.다음은 사진 을 올 리 는 것 을 예 로 들 겠 습 니 다.

/*         */
  "imageActionName": "uploadimage", /*        action  (  :http://localhost:8080/ueditor?action=uploadimage) */
  "imageFieldName": "upfile", /*           */
  "imageMaxSize": 2048000, /*       ,  B */
  "imageAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], /*          */
  "imageCompressEnable": true, /*       ,   true */
  "imageCompressBorder": 1600, /*           */
  "imageInsertAlign": "none", /*           */
  /* imageUrlPrefix + imagePathFormat            */
  "imageUrlPrefix": "/fileupload/ueditor", /*          */
  /* imagePathFormat     config.json          */
  "imagePathFormat": "/image/{yyyy}{mm}{dd}/{time}{rand:6}", /* (  :     config.json         )      ,                */
                /* {filename}         ,               */
                /* {rand:6}        ,             */
                /* {time}         */
                /* {yyyy}          */
                /* {yy}          */
                /* {mm}          */
                /* {dd}          */
                /* {hh}          */
                /* {ii}          */
                /* {ss}         */
                /*      \ : * ? " < > | */
                /*         : fex.baidu.com/ueditor/#use-format_upload_filename */
여기 서 저희 가 주목 해 야 할 점 은... imageUrlPrefix 、imagePathFormat
1)도 메 인 이름+ imageUrlPrefix+imagePathFormat 은 현재 파일 의 접근 경로 입 니 다.
2)imageUrlPrefix 는 그림 접근 경로 접두사 입 니 다.예 를 들 어http://localhost:8080/fileupload/ueditorimageUrlPrefix 는 그 중의"/fileupload/ueditor"입 니 다.
3)imagePathFormat 은 imageUrlPrefix 를 루트 경로 로 하 는 파일 저장 의 구체 적 인 경로 입 니 다.예 를 들 어:
http://localhost:8080/fileupload/ueditor/image/20190202/121222.jpgimagePathFormat 은 그 중의'/image/20190202/121222.jpg'이다.
4)남 은 다른 매개 변 수 는 뚜렷 하 다.
7.닥 칠 수 있 는 문제
1.설정 한 파일 이 최대 2048000 인 데 파일 이 1M 이상 이면 배경 이 잘못 되 었 습 니까?
해결:이것 은 기본적으로 spring boot 의 업 로드 를 열 었 기 때 문 입 니 다.application.properties 에서 spring.servlet.multipart.enabled=false 를 실행 하면 되 거나 기본 최대 값 spring.servlet.multipart.max-file-size=1MB 를 뛰 어 내 릴 수도 있 습 니 다.구체 적 으로 다음 그림 과 같 습 니 다.

2.imagePathFormat 을 수정 한 것 이 분명 합 니까?원본 경로 에 저 장 된 것 입 니까?
해결:내 가 파일 을 저장 하고 싶 은 위치 에 config.json 파일 을 직접 놓 으 면 됩 니 다.
3,온라인 관리 그림 을 표시 할 수 없 습 니까?
해결:위 에 있 는 Ueditor Controller 에서 해결 되 었 습 니 다.action=listfile 또는 action=listmimage 일 때 new ActionEnter(request,configJSonParentPath).exec()가 받 은 문자열 의 configJSonParentPath 경 로 를 빈 문자열 로 바 꾸 면 됩 니 다.다음 과 같 습 니 다.

마지막 으로 서 비 스 를 시작 하고http://localhost:8080/ueditor/index.html페이지 를 열 어 테스트 합 니 다.효 과 는 다음 그림 과 같 습 니 다.


총결산
위 에서 말 한 것 은 편집장 이 소개 한 spring boot 에서 ueditor 업로드 기능 의 실현 과 직면 한 문제 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.편집장 은 제때에 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
만약 당신 이 본문 이 당신 에 게 도움 이 된다 고 생각한다 면,전 재 를 환영 합 니 다.번 거 로 우 시 겠 지만 출처 를 밝 혀 주 십시오.감사합니다!

좋은 웹페이지 즐겨찾기