springbootの下でueditorアップロード機能の実現と遭遇した問題


前言
本文は主にspringbootの下でueditorのアップロード機能の実現と出会ういくつかの問題の処理を書きます。
全体プロジェクト構造展示

Springbootはueditorとアップロード機能を統合して具体的なステップを実現します。
1、ブルーデイトをダウンロードします。
これは公式サイトでダウンロードすればいいですが、utf-8バージョンの資源がないようです。ソース版は何回も中断されました。最終的には第三者からダウンロードしました。
2、試験ページを新規作成する
ueditorのルートディレクトリの下にindexがあります。これを使えばいいです。ソースは以下の通りです。

<!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の下で試してみましたが、イメージブックの設定はあまり役に立たないです。
5、Ueditor Controllerを新設する
ueditor.jsonの設定ファイルを読み込むと同時にアップロード方法を実現します(もちろんここでは直接にueditor.jarのアップロードを使っていますので、簡単に見えますが、自分で書くとコードの量がいっぱいあります)

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.co.fig.jsの中のserverUrlを私達の第5歩のそのcontrolerに配置する必要があります。以下の通りです。

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 */
ここで私達が重点的に理解しなければならないのは イマジガルプレミアム、イマジパントフォーム
1)ドメイン名+ イマジガルPrefix+イマジパントFormatは現在のファイルへのアクセス経路です。
2)imagUrlefixは、画像アクセス経路のプレフィックスであり、例えばhttp://localhost:8080/fileupload/ueditor、imagUrlefixはその中の「/fileupled/ueditor」である。
3)imagPathFormatは、imagUrlefixをルートとするファイル保存の具体的な経路である。例えば、
http://localhost:8080/fileupload/ueditor/image/20190202/121222.jpg,イマジPathFormatはその中の「/イメージ/20190202/1212222.jpg」です。
4)他のパラメータが残っていると明らかです。
7、起こり得る問題
1、設定されているファイルは最大20488ですが、ファイルは1 M以上のバックグラウンドでエラーが発生しましたか?
解決:これはデフォルトでspringbootのアップロードを開始したからです。aplication.propertiesでspring.servlet.multipart.enabled=falseでいいです。またはそのデフォルトの最大値spring.servlet.multip.max-file-size=1 MBを飛び降りることもできます。

2、imagePathFormatを修正したのに、単に元の経路で保存しましたか?
解决:直接config.jsonファイルをファイルを保存したいところに置いたらいいです。
3、オンライン管理画面が表示できませんか?
解决:上のUedit Controllerではすでに解决しました。action=listfileまたはaction=listimageのときにnew Action Enter(request,configJsontPath).exec()で得られた文字列のconfigJsontPathパスを空の文字列に置き換えればいいです。次のように。

最後にサービスを開始し、http://localhost:8080/ueditor/index.htmlページを開けてテストします。効果は下図のようです。


締め括りをつける
以上は小编で绍介したspringbootの下でueditorのアップロード机能の実现と问题です。皆さんに助けてほしいです。もし何か疑问があれば、メッセージをください。小编はすぐに返事します。ここでも私たちのサイトを応援してくれてありがとうございます。
本文があなたのためになると思ったら、転載を歓迎します。出所を明記してください。ありがとうございます。