parent
7ac7bcb243
commit
0635c9b017
2 changed files with 197 additions and 0 deletions
@ -0,0 +1,83 @@ |
|||||||
|
/** |
||||||
|
* The MIT License (MIT) |
||||||
|
* Copyright (c) 2012-2022 铭软科技(mingsoft.net) |
||||||
|
* Permission is hereby granted, free of charge, to any person obtaining a copy of |
||||||
|
* this software and associated documentation files (the "Software"), to deal in |
||||||
|
* the Software without restriction, including without limitation the rights to |
||||||
|
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of |
||||||
|
* the Software, and to permit persons to whom the Software is furnished to do so, |
||||||
|
* subject to the following conditions: |
||||||
|
|
||||||
|
* The above copyright notice and this permission notice shall be included in all |
||||||
|
* copies or substantial portions of the Software. |
||||||
|
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
||||||
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS |
||||||
|
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR |
||||||
|
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER |
||||||
|
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN |
||||||
|
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
||||||
|
*/ |
||||||
|
|
||||||
|
|
||||||
|
package net.mingsoft.basic.action.web; |
||||||
|
|
||||||
|
import cn.hutool.core.io.FileUtil; |
||||||
|
import com.alibaba.fastjson.JSON; |
||||||
|
import com.alibaba.fastjson.JSONObject; |
||||||
|
import com.mingsoft.ueditor.MsUeditorActionEnter; |
||||||
|
import net.mingsoft.basic.util.BasicUtil; |
||||||
|
import net.mingsoft.config.MSProperties; |
||||||
|
import org.springframework.stereotype.Controller; |
||||||
|
import org.springframework.web.bind.annotation.RequestMapping; |
||||||
|
import org.springframework.web.bind.annotation.RequestMethod; |
||||||
|
import org.springframework.web.bind.annotation.ResponseBody; |
||||||
|
import springfox.documentation.annotations.ApiIgnore; |
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest; |
||||||
|
import javax.servlet.http.HttpServletResponse; |
||||||
|
import java.util.Map; |
||||||
|
|
||||||
|
/** |
||||||
|
* 临时修复:百度编辑器上传,会在下一版本合并 |
||||||
|
* |
||||||
|
* @author 铭软开发团队 |
||||||
|
* @date 2019年7月16日 |
||||||
|
* 历史修订 2022-1-21 新增normalize(), |
||||||
|
* editor()方法过滤非法上传路径 |
||||||
|
*/ |
||||||
|
@ApiIgnore |
||||||
|
@Controller("ueAction") |
||||||
|
@RequestMapping("/static/plugins/ueditor/{version}/jsp") |
||||||
|
public class EditorAction { |
||||||
|
|
||||||
|
@ResponseBody |
||||||
|
@RequestMapping(value = "editor", method = {RequestMethod.GET, RequestMethod.POST}) |
||||||
|
public String editor(HttpServletRequest request, HttpServletResponse response, String jsonConfig) { |
||||||
|
String uploadFloderPath = MSProperties.upload.path; |
||||||
|
String rootPath = BasicUtil.getRealPath(uploadFloderPath); |
||||||
|
jsonConfig = jsonConfig.replace("{ms.upload}", "/" + uploadFloderPath); |
||||||
|
//过滤非法上传路径
|
||||||
|
Map<String, Object> map = (Map<String, Object>) JSONObject.parse(jsonConfig); |
||||||
|
String imagePathFormat = (String) map.get("imagePathFormat"); |
||||||
|
imagePathFormat = FileUtil.normalize(imagePathFormat); |
||||||
|
|
||||||
|
String filePathFormat = (String) map.get("filePathFormat"); |
||||||
|
filePathFormat = FileUtil.normalize(filePathFormat); |
||||||
|
|
||||||
|
String videoPathFormat = (String) map.get("videoPathFormat"); |
||||||
|
videoPathFormat = FileUtil.normalize(videoPathFormat); |
||||||
|
|
||||||
|
map.put("imagePathFormat", imagePathFormat); |
||||||
|
map.put("filePathFormat", filePathFormat); |
||||||
|
map.put("videoPathFormat", videoPathFormat); |
||||||
|
|
||||||
|
jsonConfig = JSONObject.toJSONString(map); |
||||||
|
MsUeditorActionEnter actionEnter = new MsUeditorActionEnter(request, rootPath, jsonConfig, BasicUtil.getRealPath("")); |
||||||
|
String json = actionEnter.exec(); |
||||||
|
Map jsonMap = JSON.parseObject(json,Map.class); |
||||||
|
jsonMap.put("url","/".concat(uploadFloderPath).concat(jsonMap.get("url")+"")); |
||||||
|
return JSONObject.toJSONString(jsonMap); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
@ -0,0 +1,114 @@ |
|||||||
|
<meta charset="utf-8"> |
||||||
|
<!--浏览器小图标--> |
||||||
|
<link rel="icon" href="/logo.ico" type="x-icon"> |
||||||
|
<script type="text/javascript" src="${base}/static/plugins/vue/2.6.9/vue.min.js"></script> |
||||||
|
<script src="${base}/static/plugins/vue-i18n/8.18.2/vue-i18n.js"></script> |
||||||
|
<!-- 图标 --> |
||||||
|
<link rel="stylesheet" type="text/css" href="${base}/static/plugins/iconfont/1.0.0/iconfont.css" /> |
||||||
|
<script src="${base}/static/plugins/iconfont/1.0.0/iconfont.js"></script> |
||||||
|
|
||||||
|
<!-- 引入样式 --> |
||||||
|
<link rel="stylesheet" href="${base}/static/plugins/element-ui/2.15.7/theme-chalk/index.min.css"> |
||||||
|
<!-- 引入组件库 --> |
||||||
|
<script src="${base}/static/plugins/element-ui/2.15.7/index.min.js"></script> |
||||||
|
<script src="${base}/static/plugins/element-ui/2.15.7/local/en.min.js"></script> |
||||||
|
<script src="${base}/static/plugins/element-ui/2.15.7/local/zh-CN.min.js"></script> |
||||||
|
<!--图片懒加载--> |
||||||
|
<script src="${base}/static/plugins/vue.lazyload/1.2.6/vue-lazyload.js"></script> |
||||||
|
<!--网络请求框架--> |
||||||
|
<script src="${base}/static/plugins/axios/0.18.0/axios.min.js"></script> |
||||||
|
<script src="${base}/static/plugins/qs/6.6.0/qs.min.js"></script> |
||||||
|
<!--金额转换--> |
||||||
|
<script src="${base}/static/plugins/accounting/0.4.1/accounting.js"></script> |
||||||
|
<!--时间转换--> |
||||||
|
<script src="${base}/static/plugins/moment/2.24.0/moment.min.js"></script> |
||||||
|
<!--铭飞--> |
||||||
|
<script src="${base}/static/plugins/ms/2.0/ms.umd.js"></script> |
||||||
|
<script src="${base}/static/plugins/ms/2.0/ms-el-form.umd.js"></script> |
||||||
|
<script src="${base}/static/plugins/vue-ueditor-wrap/vue-ueditor-wrap.min.js"></script> |
||||||
|
|
||||||
|
<#--复制--> |
||||||
|
<script src="${base}/static/plugins/clipboard/clipboard.js"></script> |
||||||
|
<#-- 树形下拉--> |
||||||
|
<script src="${base}/static/plugins/tree-select/tree.js"></script> |
||||||
|
<!--通用样式--> |
||||||
|
<link rel="stylesheet" href="${base}/static/css/app.css"/> |
||||||
|
<#--主题--> |
||||||
|
<link rel="stylesheet" href="${base}/static/css/theme.css"> |
||||||
|
<![if IE]> |
||||||
|
<script src="${base}/static/plugins/babel-polyfill/7.8.3/polyfill.min.js"></script> |
||||||
|
<![endif]> |
||||||
|
|
||||||
|
<#--语言文件--> |
||||||
|
<script src="${base}/static/locale/lang/base/zh_CN.js"></script> |
||||||
|
<script src="${base}/static/locale/lang/base/en_US.js"></script> |
||||||
|
|
||||||
|
<script src="${base}/static/mdiy/index.js"></script> |
||||||
|
|
||||||
|
<#--下拉框--> |
||||||
|
<script src="${base}/static/plugins/vue-treeselect/0.4.0/vue-treeselect.umd.min.js"></script> |
||||||
|
<link rel="stylesheet" href="${base}/static/plugins/vue-treeselect/0.4.0/vue-treeselect.min.css"> |
||||||
|
|
||||||
|
<#--代码预览--> |
||||||
|
<script src="${base}/static/plugins/clipboard/clipboard.js"></script> |
||||||
|
<script src="${base}/static/plugins/codemirror/5.48.4/codemirror.js"></script> |
||||||
|
<link href="${base}/static/plugins/codemirror/5.48.4/codemirror.css" rel="stylesheet"> |
||||||
|
<script src="${base}/static/plugins/codemirror/5.48.4/mode/css/css.js"></script> |
||||||
|
<script src="${base}/static/plugins/vue-codemirror/vue-codemirror.js"></script> |
||||||
|
<script src="${base}/static/plugins/codemirror/5.48.4/addon/scroll/annotatescrollbar.js"></script> |
||||||
|
<script src="${base}/static/plugins/codemirror/5.48.4/mode/xml/xml.js"></script> |
||||||
|
<script src="${base}/static/plugins/codemirror/5.48.4/mode/javascript/javascript.js"></script> |
||||||
|
|
||||||
|
<script> |
||||||
|
ms.base = "${base}"; |
||||||
|
ms.login = "${managerPath}/login.do"; |
||||||
|
ms.manager = "${managerPath}"; |
||||||
|
ms.web = ms.base; |
||||||
|
//百度编辑器默认配置 |
||||||
|
ms.editorConfig={ |
||||||
|
imageScaleEnabled :true, |
||||||
|
autoHeightEnabled: true, |
||||||
|
autoFloatEnabled: false, |
||||||
|
scaleEnabled: true, |
||||||
|
compressSide:0, |
||||||
|
maxImageSideLength:1000, |
||||||
|
maximumWords: 2000, |
||||||
|
initialFrameWidth: '100%', |
||||||
|
initialFrameHeight: 400, |
||||||
|
serverUrl: ms.base + "/static/plugins/ueditor/1.4.3.3/jsp/editor.do?jsonConfig=%7BvideoUrlPrefix:\'\',fileManagerListPath:\'\',imageMaxSize:204800000,videoMaxSize:204800000,fileMaxSize:204800000,fileUrlPrefix:\'\',imageUrlPrefix:\'\',imagePathFormat:\'/${appId}/cms/content/editor/%7Btime%7D\',filePathFormat:\'/${appId}/cms/content/editor/%7Btime%7D\',videoPathFormat:\'/${appId}/cms/content/editor/%7Btime%7D\'%7D", |
||||||
|
UEDITOR_HOME_URL: ms.base + '/static/plugins/ueditor/1.4.3.3/' |
||||||
|
} |
||||||
|
|
||||||
|
//ms.base = "http://192.168.0.54:90/"; |
||||||
|
//ms.manager = "http://192.168.0.54:90/apis/ms/"; |
||||||
|
//ms.web = "http://192.168.0.54:90/apis/"; |
||||||
|
//图片懒加载 |
||||||
|
Vue.use(VueLazyload, { |
||||||
|
error: ms.base + '/static/images/error.png', |
||||||
|
loading: ms.base + '/static/images/loading.png', |
||||||
|
}) |
||||||
|
Vue.component('treeselect', VueTreeselect.Treeselect) |
||||||
|
Vue.component('vue-ueditor-wrap', VueUeditorWrap); |
||||||
|
|
||||||
|
</script> |
||||||
|
<style> |
||||||
|
.ms-admin-menu .is-active { |
||||||
|
border: 0px !important; |
||||||
|
} |
||||||
|
.vue-treeselect__placeholder,.vue-treeselect__single-value { |
||||||
|
font-size: 12px; |
||||||
|
padding-top: -8px; |
||||||
|
} |
||||||
|
.vue-treeselect__control { |
||||||
|
height: 28px; |
||||||
|
} |
||||||
|
.vue-treeselect__label { |
||||||
|
font-size: 12px; |
||||||
|
} |
||||||
|
|
||||||
|
.vue-treeselect__menu-container { |
||||||
|
z-index: 9999!important; |
||||||
|
} |
||||||
|
</style> |
||||||
|
|
||||||
|
|
||||||
Loading…
Reference in new issue