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 、imagePathFormat1)도 메 인 이름+ 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 업로드 기능 의 실현 과 직면 한 문제 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.편집장 은 제때에 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
만약 당신 이 본문 이 당신 에 게 도움 이 된다 고 생각한다 면,전 재 를 환영 합 니 다.번 거 로 우 시 겠 지만 출처 를 밝 혀 주 십시오.감사합니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
thymeleaf로 HTML 페이지를 동적으로 만듭니다 (spring + gradle)지난번에는 에서 화면에 HTML을 표시했습니다. 이번에는 화면을 동적으로 움직여보고 싶기 때문에 입력한 문자를 화면에 표시시키고 싶습니다. 초보자의 비망록이므로 이상한 점 등 있으면 지적 받을 수 있으면 기쁩니다! ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.