8 files modified
4 files added
| | |
| | | <artifactId>guava</artifactId> |
| | | <version>26.0-jre</version> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>org.springframework.boot</groupId> |
| | | <artifactId>spring-boot-configuration-processor</artifactId> |
| | | <optional>true</optional> |
| | | </dependency> |
| | | </dependencies> |
| | | <build> |
| | | <resources> |
New file |
| | |
| | | package com.matrix.component.tools; |
| | | |
| | | |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | |
| | | import java.util.Objects; |
| | | import java.util.Set; |
| | | |
| | | public class JSONUtil { |
| | | |
| | | /** |
| | | * 用第二个json对象覆盖第一个json对象的值,并返回一个新的json对象 |
| | | * |
| | | * @param source |
| | | * @param target |
| | | * @return |
| | | */ |
| | | public static JSONObject extend(JSONObject source, JSONObject target) { |
| | | |
| | | Objects.requireNonNull(source); |
| | | Objects.requireNonNull(target); |
| | | JSONObject jsonObject = JSON.parseObject(source.toJSONString()); |
| | | |
| | | Set<String> set = target.keySet(); |
| | | |
| | | set.stream().forEach(key -> { |
| | | jsonObject.put(key, target.get(key)); |
| | | |
| | | }); |
| | | |
| | | return jsonObject; |
| | | |
| | | } |
| | | } |
| | |
| | | import com.matrix.component.ueditor.hunter.ImageHunter; |
| | | import com.matrix.component.ueditor.upload.Uploader; |
| | | import com.matrix.component.ueditor.define.State; |
| | | |
| | | import java.util.Map; |
| | | |
| | | import javax.servlet.http.HttpServletRequest; |
| | |
| | | private String actionType = null; |
| | | |
| | | private ConfigManager configManager = null; |
| | | private UeditorProperties ueditorProperties = null; |
| | | |
| | | public ActionEnter ( HttpServletRequest request, String rootPath ) { |
| | | public ActionEnter (HttpServletRequest request, String rootPath , UeditorProperties ueditorProperties) { |
| | | |
| | | this.request = request; |
| | | this.rootPath = rootPath; |
| | | this.actionType = request.getParameter( "action" ); |
| | | this.contextPath = request.getContextPath(); |
| | | this.configManager = ConfigManager.getInstance( this.rootPath, this.contextPath, request.getRequestURI() ); |
| | | this.ueditorProperties=ueditorProperties; |
| | | this.configManager = ConfigManager.getInstance( this.rootPath, this.contextPath, request.getRequestURI() ,ueditorProperties ); |
| | | |
| | | } |
| | | |
| | |
| | | import java.net.URISyntaxException; |
| | | import java.util.HashMap; |
| | | import java.util.Map; |
| | | import java.util.ResourceBundle; |
| | | |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.matrix.component.tools.JSONUtil; |
| | | import com.matrix.component.ueditor.define.ActionMap; |
| | | import com.matrix.core.tools.EnvironmentHolder; |
| | | import com.matrix.system.common.constance.PropertiesConstance; |
| | | import org.apache.commons.io.IOUtils; |
| | | import org.json.JSONArray; |
| | | import org.json.JSONObject; |
| | | import org.springframework.context.EnvironmentAware; |
| | | import org.springframework.core.env.Environment; |
| | | |
| | | |
| | | /** |
| | |
| | | * @author hancong03@baidu.com |
| | | * |
| | | */ |
| | | public final class ConfigManager implements EnvironmentAware { |
| | | public final class ConfigManager { |
| | | |
| | | private Environment env; |
| | | private final String rootPath; |
| | | private final String originalPath; |
| | | private final String contextPath; |
| | |
| | | // 远程图片抓取filename定义 |
| | | private final static String REMOTE_FILE_NAME = "remote"; |
| | | |
| | | private final static String FILES_TORAGE_PATH ="file_storage_path"; |
| | | |
| | | @Override |
| | | public void setEnvironment(Environment environment) { |
| | | env = environment; |
| | | |
| | | |
| | | } |
| | | private UeditorProperties ueditorProperties = null; |
| | | |
| | | /* |
| | | * 通过一个给定的路径构建一个配置管理器, 该管理器要求地址路径所在目录下必须存在config.properties文件 |
| | | */ |
| | | private ConfigManager(String rootPath, String contextPath, String uri) throws FileNotFoundException, IOException { |
| | | private ConfigManager(String rootPath, String contextPath, String uri, UeditorProperties ueditorProperties ) throws FileNotFoundException, IOException { |
| | | |
| | | rootPath = rootPath.replace("\\", "/"); |
| | | |
| | | this.ueditorProperties=ueditorProperties; |
| | | this.rootPath = rootPath; |
| | | this.contextPath = contextPath; |
| | | if (contextPath.length() > 0) { |
| | |
| | | * 服务器所在项目路径 |
| | | * @param uri |
| | | * 当前访问的uri |
| | | * @param ueditorProperties |
| | | * @return 配置管理器实例或者null |
| | | */ |
| | | public static ConfigManager getInstance(String rootPath, String contextPath, String uri) { |
| | | public static ConfigManager getInstance(String rootPath, String contextPath, String uri, UeditorProperties ueditorProperties) { |
| | | |
| | | try { |
| | | return new ConfigManager(rootPath, contextPath, uri); |
| | | return new ConfigManager(rootPath, contextPath, uri,ueditorProperties); |
| | | } catch (Exception e) { |
| | | return null; |
| | | } |
| | |
| | | |
| | | conf.put("savePath", savePath); |
| | | |
| | | String fileStoragePath = env.getProperty(FILES_TORAGE_PATH); |
| | | String fileStoragePath = EnvironmentHolder.getPropertis(PropertiesConstance.FILE_STORAGE_PATH); |
| | | conf.put("rootPath",fileStoragePath); |
| | | |
| | | return conf; |
| | |
| | | //String configContent = this.readFile(this.getConfigPath()); |
| | | String configContent = this.filter(IOUtils.toString(this.getClass().getClassLoader().getResourceAsStream("config/config.json"))); |
| | | |
| | | |
| | | try { |
| | | JSONObject jsonConfig = new JSONObject(configContent); |
| | | |
| | | com.alibaba.fastjson.JSONObject extend = JSONUtil.extend( |
| | | JSON.parseObject(configContent), |
| | | JSON.parseObject(JSON.toJSONString(ueditorProperties))); |
| | | jsonConfig=new JSONObject(extend.toJSONString()); |
| | | |
| | | this.jsonConfig = jsonConfig; |
| | | } catch (Exception e) { |
| | | this.jsonConfig = null; |
New file |
| | |
| | | package com.matrix.component.ueditor; |
| | | |
| | | import lombok.Data; |
| | | import org.springframework.boot.context.properties.ConfigurationProperties; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | @Data |
| | | @Component |
| | | @ConfigurationProperties(prefix = "ueditor") |
| | | public class UeditorProperties { |
| | | |
| | | /** |
| | | * 图片访问路径前缀 |
| | | */ |
| | | private String imageUrlPrefix; |
| | | /* 上传保存路径,可以自定义保存路径和文件名格式 */ |
| | | /* {filename} 会替换成原文件名,配置这项需要注意中文乱码问题 */ |
| | | /* {rand:6} 会替换成随机数,后面的数字是随机数的位数 */ |
| | | /* {time} 会替换成时间戳 */ |
| | | /* {yyyy} 会替换成四位年份 */ |
| | | /* {yy} 会替换成两位年份 */ |
| | | /* {mm} 会替换成两位月份 */ |
| | | /* {dd} 会替换成两位日期 */ |
| | | /* {hh} 会替换成两位小时 */ |
| | | /* {ii} 会替换成两位分钟 */ |
| | | /* {ss} 会替换成两位秒 */ |
| | | /* 非法字符 \ : * ? " < > | */ |
| | | /* 具请体看线上文档: fex.baidu.com/ueditor/#use-format_upload_filename */ |
| | | private String imagePathFormat; |
| | | |
| | | |
| | | |
| | | |
| | | /* 涂鸦图片上传配置项 */ |
| | | private String scrawlPathFormat; |
| | | private String scrawlUrlPrefix; |
| | | |
| | | /* 截图工具上传 */ |
| | | private String snapscreenPathFormat; |
| | | private String snapscreenUrlPrefix; |
| | | |
| | | /* 抓取远程图片配置 */ |
| | | private String catcherPathFormat; |
| | | private String catcherUrlPrefix; |
| | | |
| | | /* 上传视频配置 */ |
| | | private String videoPathFormat; |
| | | private String videoUrlPrefix; |
| | | |
| | | /* 上传文件配置 */ |
| | | private String filePathFormat; |
| | | private String fileUrlPrefix; |
| | | |
| | | /* 列出指定目录下的图片 */ |
| | | private String imageManagerListPath; |
| | | /* 列出指定目录下的文件 */ |
| | | private String fileManagerListPath; |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | } |
New file |
| | |
| | | package com.matrix.core.tools; |
| | | |
| | | import com.matrix.core.exception.GlobleException; |
| | | import org.springframework.context.EnvironmentAware; |
| | | import org.springframework.core.env.Environment; |
| | | |
| | | public class EnvironmentHolder implements EnvironmentAware { |
| | | |
| | | |
| | | private static Environment env; |
| | | |
| | | |
| | | @Override |
| | | public void setEnvironment(Environment environment) { |
| | | env = environment; |
| | | } |
| | | |
| | | /** |
| | | * 获取配置文件中的值 |
| | | * @param key |
| | | * @return |
| | | */ |
| | | public static String getPropertis(String key) { |
| | | if (env != null) { |
| | | return env.getProperty(key); |
| | | } else { |
| | | throw new GlobleException("Environment 未初始化"); |
| | | } |
| | | } |
| | | |
| | | } |
| | |
| | | package com.matrix.system.common.actions; |
| | | |
| | | import com.matrix.component.ueditor.ActionEnter; |
| | | import com.matrix.component.ueditor.UeditorProperties; |
| | | import com.matrix.core.exception.GlobleException; |
| | | import com.matrix.core.tools.LogUtil; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Controller; |
| | | import org.springframework.web.bind.annotation.RequestMapping; |
| | | |
| | |
| | | @RequestMapping(value = "admin/beditor") |
| | | public class UeditorController { |
| | | |
| | | |
| | | @Autowired |
| | | UeditorProperties ueditorProperties; |
| | | |
| | | /** |
| | | * 百度编辑器主入口方法 |
| | | * |
| | |
| | | response.setContentType("application/json"); |
| | | String rootPath = request.getSession().getServletContext().getRealPath("/"); |
| | | try { |
| | | String exec = new ActionEnter(request, rootPath).exec(); |
| | | String exec = new ActionEnter(request, rootPath,ueditorProperties).exec(); |
| | | PrintWriter writer = response.getWriter(); |
| | | writer.write(exec); |
| | | writer.flush(); |
| | |
| | | public static final String SAFEPATH = "/su"; |
| | | |
| | | public static final String TOKEN_KEY = "token"; |
| | | /** |
| | | * nginx访问地址 |
| | | */ |
| | | public static final String NGINX_URL = "static_resource_url"; |
| | | /** |
| | | * 存储路径 |
| | | */ |
| | | public static final String FILES_TORAGE_PATH = "file_storage_path"; |
| | | |
| | | /** |
| | | * 过滤特殊字符 |
| | |
| | | */ |
| | | public static final String WX_ORDER_NOTICE_DINGDING_TOKEN = "wxOrderNoticeDingdingToken"; |
| | | |
| | | /** |
| | | * 管理端小程序appid |
| | | */ |
| | | public static final String MINI_PROGRAM_MANAGER_APP_ID = "xcx_manager_appid"; |
| | | /** |
| | | * 管理端小程序secret |
| | | */ |
| | | public static final String MINI_PROGRAM_MANAGER_SECRET = "xcx_manager_secret"; |
| | | |
| | | |
| | | |
New file |
| | |
| | | package com.matrix.system.common.constance; |
| | | |
| | | /** |
| | | * 属性配置文件 |
| | | * |
| | | * @author JIANGYOUYAO |
| | | * @email 935090232@qq.com |
| | | * @date Dec 10, 2017 |
| | | */ |
| | | public class PropertiesConstance { |
| | | |
| | | |
| | | |
| | | private PropertiesConstance() { |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | /** |
| | | * nginx访问地址 |
| | | */ |
| | | public static final String NGINX_URL = "static_resource_url"; |
| | | /** |
| | | * 存储路径 |
| | | */ |
| | | public static final String FILE_STORAGE_PATH = "file_storage_path"; |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | } |
| | |
| | | |
| | | #是否启用异常上报 |
| | | is_open_exception_report=true |
| | | showExcptionUrl=http://test.hive.jyymatrix.cc/showException |
| | | showExcptionUrl=http://test.hive.jyymatrix.cc/showException |
| | | |
| | | |
| | | #百度编辑器,覆盖默认配置 |
| | | ueditor.imageUrlPrefix=http://testfile.hive.jyymatrix.cc/uploadeFile |
| | | ueditor.imagePathFormat=/image/{yyyy}{mm}{dd}/{time}{rand:6} |
| | | |
| | | ueditor.scrawlPathFormat=/ueditor/jsp/upload/image/{yyyy}{mm}{dd}/{time}{rand:6} |
| | | ueditor.scrawlUrlPrefix=http://testfile.hive.jyymatrix.cc/uploadeFile |
| | | |
| | | ueditor.snapscreenPathFormat=/ueditor/jsp/upload/image/{yyyy}{mm}{dd}/{time}{rand:6} |
| | | ueditor.snapscreenUrlPrefix=http://testfile.hive.jyymatrix.cc/uploadeFile |
| | | |
| | | ueditor.catcherPathFormat=/ueditor/jsp/upload/image/{yyyy}{mm}{dd}/{time}{rand:6} |
| | | ueditor.catcherUrlPrefix=http://testfile.hive.jyymatrix.cc/uploadeFile |
| | | |
| | | ueditor.videoPathFormat=/ueditor/jsp/upload/video/{yyyy}{mm}{dd}/{time}{rand:6} |
| | | ueditor.videoUrlPrefix=http://127.0.0.1:1088/uploadeFile/ |
| | | |
| | | ueditor.filePathFormat=/ueditor/jsp/upload/file/{yyyy}{mm}{dd}/{time}{rand:6} |
| | | ueditor.fileUrlPrefix=http://127.0.0.1:1088/uploadeFile/ |
| | | |
| | | ueditor.imageManagerListPath=http://127.0.0.1:1088/uploadeFile/ |
| | | ueditor.fileManagerListPath=http://127.0.0.1:1088/uploadeFile/ |
| | | |
| | | |
| | | |
| | |
| | | "imageCompressEnable": true, /* 是否压缩图片,默认是true */ |
| | | "imageCompressBorder": 1600, /* 图片压缩最长边限制 */ |
| | | "imageInsertAlign": "none", /* 插入的图片浮动方式 */ |
| | | "imageUrlPrefix": "http://testfile.hive.jyymatrix.cc/uploadeFile", /* 图片访问路径前缀 */ |
| | | "imagePathFormat": "/image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */ |
| | | "imageUrlPrefix": "", /* 图片访问路径前缀 */ |
| | | "imagePathFormat": "", /* 上传保存路径,可以自定义保存路径和文件名格式 */ |
| | | /* {filename} 会替换成原文件名,配置这项需要注意中文乱码问题 */ |
| | | /* {rand:6} 会替换成随机数,后面的数字是随机数的位数 */ |
| | | /* {time} 会替换成时间戳 */ |
| | |
| | | /* 涂鸦图片上传配置项 */ |
| | | "scrawlActionName": "uploadscrawl", /* 执行上传涂鸦的action名称 */ |
| | | "scrawlFieldName": "upfile", /* 提交的图片表单名称 */ |
| | | "scrawlPathFormat": "/ueditor/jsp/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */ |
| | | "scrawlPathFormat": "", /* 上传保存路径,可以自定义保存路径和文件名格式 */ |
| | | "scrawlMaxSize": 2048000, /* 上传大小限制,单位B */ |
| | | "scrawlUrlPrefix": "http://testfile.hive.jyymatrix.cc/uploadeFile", /* 图片访问路径前缀 */ |
| | | "scrawlUrlPrefix": "", /* 图片访问路径前缀 */ |
| | | "scrawlInsertAlign": "none", |
| | | |
| | | /* 截图工具上传 */ |
| | | "snapscreenActionName": "uploadimage", /* 执行上传截图的action名称 */ |
| | | "snapscreenPathFormat": "/ueditor/jsp/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */ |
| | | "snapscreenUrlPrefix": "http://testfile.hive.jyymatrix.cc/uploadeFile", /* 图片访问路径前缀 */ |
| | | "snapscreenPathFormat": "", /* 上传保存路径,可以自定义保存路径和文件名格式 */ |
| | | "snapscreenUrlPrefix": "", /* 图片访问路径前缀 */ |
| | | "snapscreenInsertAlign": "none", /* 插入的图片浮动方式 */ |
| | | |
| | | /* 抓取远程图片配置 */ |
| | | "catcherLocalDomain": ["127.0.0.1", "localhost", "img.baidu.com"], |
| | | "catcherActionName": "catchimage", /* 执行抓取远程图片的action名称 */ |
| | | "catcherFieldName": "source", /* 提交的图片列表表单名称 */ |
| | | "catcherPathFormat": "/ueditor/jsp/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */ |
| | | "catcherUrlPrefix": "http://testfile.hive.jyymatrix.cc/uploadeFile", /* 图片访问路径前缀 */ |
| | | "catcherPathFormat": "", /* 上传保存路径,可以自定义保存路径和文件名格式 */ |
| | | "catcherUrlPrefix": "", /* 图片访问路径前缀 */ |
| | | "catcherMaxSize": 2048000, /* 上传大小限制,单位B */ |
| | | "catcherAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], /* 抓取图片格式显示 */ |
| | | |
| | | /* 上传视频配置 */ |
| | | "videoActionName": "uploadvideo", /* 执行上传视频的action名称 */ |
| | | "videoFieldName": "upfile", /* 提交的视频表单名称 */ |
| | | "videoPathFormat": "/ueditor/jsp/upload/video/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */ |
| | | "videoUrlPrefix": "http://127.0.0.1:1088/uploadeFile/", /* 视频访问路径前缀 */ |
| | | "videoPathFormat": "", /* 上传保存路径,可以自定义保存路径和文件名格式 */ |
| | | "videoUrlPrefix": "", /* 视频访问路径前缀 */ |
| | | "videoMaxSize": 102400000, /* 上传大小限制,单位B,默认100MB */ |
| | | "videoAllowFiles": [ |
| | | ".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg", |
| | |
| | | /* 上传文件配置 */ |
| | | "fileActionName": "uploadfile", /* controller里,执行上传视频的action名称 */ |
| | | "fileFieldName": "upfile", /* 提交的文件表单名称 */ |
| | | "filePathFormat": "/ueditor/jsp/upload/file/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */ |
| | | "fileUrlPrefix": "http://127.0.0.1:1088/uploadeFile/", /* 文件访问路径前缀 */ |
| | | "filePathFormat": "", /* 上传保存路径,可以自定义保存路径和文件名格式 */ |
| | | "fileUrlPrefix": "", /* 文件访问路径前缀 */ |
| | | "fileMaxSize": 51200000, /* 上传大小限制,单位B,默认50MB */ |
| | | "fileAllowFiles": [ |
| | | ".png", ".jpg", ".jpeg", ".gif", ".bmp", |
| | |
| | | |
| | | /* 列出指定目录下的图片 */ |
| | | "imageManagerActionName": "listimage", /* 执行图片管理的action名称 */ |
| | | "imageManagerListPath": "http://127.0.0.1:1088/uploadeFile/", /* 指定要列出图片的目录 */ |
| | | "imageManagerListPath": "", /* 指定要列出图片的目录 */ |
| | | "imageManagerListSize": 20, /* 每次列出文件数量 */ |
| | | "imageManagerUrlPrefix": "", /* 图片访问路径前缀 */ |
| | | "imageManagerInsertAlign": "none", /* 插入的图片浮动方式 */ |
| | |
| | | |
| | | /* 列出指定目录下的文件 */ |
| | | "fileManagerActionName": "listfile", /* 执行文件管理的action名称 */ |
| | | "fileManagerListPath": "http://127.0.0.1:1088/uploadeFile/", /* 指定要列出文件的目录 */ |
| | | "fileManagerListPath": "", /* 指定要列出文件的目录 */ |
| | | "fileManagerUrlPrefix": "", /* 文件访问路径前缀 */ |
| | | "fileManagerListSize": 20, /* 每次列出文件数量 */ |
| | | "fileManagerAllowFiles": [ |