最近项目中用到了ueditor上传图片、附件等资源,项目要求把使用ueditor上传内容存放在非应用目录下,指定到指定盘符,路径可配置,ueditor默认情况下存放在工程内部/ueditor/jsp/upload/...,如:
D:\Program Files\apache-tomcat-9.0.10\webapps\jforum\ueditor\jsp\upload
现要求将图片存放到服务器外面,如以下路径(举例):
D:\upload
同时在编辑时,要正确显示上传内容。
网上看了很多资料,没有找到满意的解决方案,大部分是修改源代码,偶而有一篇不改代码的,也比较麻烦,于是自己研究了一凡,算是比较满意地解决了吧!不能修改源码,只是扩展一个类,改改配置项。
先说一下怎么定位问题的吧.
1)通过jd-gui反编译,发现文件上传保存用的是BinaryUploader类,这个类是依赖了配置项rootPath。然后我们去ConfigManager中去找
2)发面rootPath来源于ConfigManager实例的this.rootPath,接着看这个变量哪里来的
3)在ConfigManager构造函数中传入了rootPath,初始指向应用的部署物理路径,依赖这个值在构造函数中去找到了ueditor的ueditor/jsp/config.json配置文件,接下来这个rootPath的用途就是文件上传的根路径了。接着看谁new了ConfigManager
4)原来是ActionEnter创建了ConfigManager,将应用的根路径“/”对应的物理路径传入了
5)ActionEnter正好是ueditor初始化时用到的,请看
接下来说一下解决思路:只要在ConfigManager实例化之后,将rootPath指向我们的外部路径即可以达到我们的目的,同时要求文件上传后正确显示,我们还必须为Tomcat配置一个外部地址的映射;
1)配置Tomcat虚拟路径,/jforum/upload是一个虚拟路径,也就是上传文件的路径前缀,这个虚拟路径映射到D:/upload目录,也就是附件上传的目录;
<Context path="/jforum/upload" docBase="D:/upload" reloadable="false" ></Contextt>
2)在config.json中添中配置项,并修改图片/附件...的路径前缀与保存格式,如下红色部分,附件/涂鸦/视频同样修改即可;
/* 上传文件的绝对路径 */
"uploadFileRootPath": "D:/upload",
/* 上传图片配置项 */
"imageActionName": "uploadimage", /* 执行上传图片的action名称 */
"imageFieldName": "upfile", /* 提交的图片表单名称 */
"imageMaxSize": 2048000, /* 上传大小限制,单位B */
"imageAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], /* 上传图片格式显示 */
"imageCompressEnable": true, /* 是否压缩图片,默认是true */
"imageCompressBorder": 1600, /* 图片压缩最长边限制 */
"imageInsertAlign": "none", /* 插入的图片浮动方式 */
"imageUrlPrefix": "/jforum/upload", /* 图片访问路径前缀 */
"imagePathFormat": "/image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上传保存路径,可以自定义保存路径和文件名格式 */
3)写个类扩展ActionEnter,同时修改掉ConfigManager中的rootPath,有两个难点:a)ActionEnter的configManager属性是private的,并且configManager的rootPath属性是private final的,还好有反射,可以搞定;b)不能在构造函数中去修改rootPath,因为要保存ConfigManager被正确构造(主要是正确加载到config.json),所以需要一个方法去修改rootPath为config.json中新中的配置项uploadFileRootPath,该配置项与tomcat中虚拟路径对应的物理路径一致。
源代码如下:
package com.baidu.ueditor;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import javax.servlet.http.HttpServletRequest;
import org.json.JSONObject;
public class ActionEnterExt extends ActionEnter {
public ActionEnterExt(HttpServletRequest request, String rootPath) {
super(request, rootPath);
}
public void configUploadPath() {
try {
// 读取父类的configManager的值,读之前改变private访问限制
Field field1 = getClass().getSuperclass().getDeclaredField("configManager");
field1.setAccessible(true);
ConfigManager configManager = (ConfigManager) field1.get(this);
// 读取父类的configManager的属性rootPath的值,读之前改变private final访问限制
Field field2 = configManager.getClass().getDeclaredField("rootPath");
field2.setAccessible(true);
Field modifiersField = Field.class.getDeclaredField("modifiers");
modifiersField.setAccessible(true);
modifiersField.setInt(field2, field2.getModifiers() & ~Modifier.FINAL);
// 读取ueditor的配置文件中的uploadFileRootPath,即保存的绝对路径,
// 将该值修改为上面的rootPath的值,ueditor依赖这个值保存文件与图片
System.out.println("rootPath原值:" + field2.get(configManager));
JSONObject jsonCofig = configManager.getAllConfig();
String uploadFileRootPath = jsonCofig.getString("uploadFileRootPath");
field2.set(configManager, uploadFileRootPath);
System.out.println("rootPath新值:" + field2.get(configManager));
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
4)最后修改一个ueditor的入口controller.jsp,使用自定义的扩展类,并调用configUploadPath去修改rootPath,如下所示:
<%@ page language="java" contentType="text/html; charset=UTF-8"
import="com.baidu.ueditor.ActionEnterExt"
pageEncoding="UTF-8"%>
<%@ page trimDirectiveWhitespaces="true" %>
<%
request.setCharacterEncoding( "utf-8" );
response.setHeader("Content-Type" , "text/html");
String rootPath = application.getRealPath( "/" );
ActionEnterExt actionEnter = new ActionEnterExt( request, rootPath );
actionEnter.configUploadPath();
out.write( actionEnter.exec() );
%>
相关推荐
总之,正确设置百度UEditor在Tomcat上的虚拟路径映射,不仅能让编辑器正常工作,还能提高Web应用的可维护性和扩展性。在实际操作中,可能还需要根据具体环境和需求进行微调,但基本的思路和步骤如上所述。希望这个...
1.百度的ueditor上传控件,在上传图片时,默认只能存储在项目文件夹下,这样tomcat重新部署,有可能之前上传的文件就会丢失。 2.如果想把图片上传到项目目录之外的目录中,直接下载本controller.jsp,替换原...
ueditor上传文件配置 ueditor是一个功能强大的富文本编辑器,广泛应用于各种Web应用程序中。其中,文件上传配置是ueditor的核心功能之一,本文将详细介绍ueditor上传文件配置的过程。 配置ueditor jar包 首先,...
【标题】"ueditor上传图片配置"涉及到的是在SpringBoot框架下集成并配置ueditor,以便实现用户在编辑器中上传图片的功能。ueditor是一款流行的富文本编辑器,它提供了丰富的在线编辑功能,包括文字编辑、图片上传、...
【标题】"uEditor上传图片并保存为原文件名"涉及的是在ASP.NET环境中使用uEditor编辑器进行图片上传,并确保图片文件以上传时的原始文件名存储的过程。uEditor是一个流行的富文本编辑器,广泛应用于网站内容管理系统...
默认情况下,UEditor会将图片上传到其提供的服务器,但为了数据安全和性能优化,许多开发者会选择将图片保存在本地服务器。 二、自定义图片上传路径 1. 配置项修改:首先,你需要在UEditor的配置文件(通常名为`...
在完成 UEditor 配置和文件上传配置后,需要在要嵌入的页面中引入 UEditor 的 js 文件,并将 textarea 内容替换为 UEditor。例如,可以使用以下代码: ```html <script type="text/javascript" src="/ueditor/...
在项目根目录`webroot`下,ueditor位于`/resources/ueditor`,图片上传的保存路径为`/upload`,附件的保存路径为`/uploadfile`。在`ueditor.config.js`中,根据这些路径调整`imageUrl`和`filePath`的值。 【前后端...
4. 保存配置文件并刷新 UEditor 页面,图片上传时应遵循新的保存路径。 **注意事项** - 确保修改后的路径是可写的,否则图片上传会失败。 - 如果服务器有权限控制,需要确保 UEditor 运行的用户有足够的权限访问和...
然而,其默认配置通常将图片保存在项目的根目录下,这可能不适应所有应用场景。针对这个问题,我们将探讨如何修改UEditor的配置,使其能够实现以下两个目标: 1. **复制粘贴时保持图片原链接**: 当用户从其他网站...
下一步,我们需要配置 config.json 文件,这个文件是 ueditor 编辑器的核心配置文件,我们需要将其放置在正确的路径下,以便 ueditor 编辑器能够正确地加载它。在这里,我们可以将 config.json 文件放置在 static ...
UEditor 配置文件说明,上传图片集成struts2配置,详见博客: http://blog.csdn.net/omsvip/article/details/23271167
在本文中,我们将深入探讨如何将Spring Boot、Thymeleaf和百度Ueditor进行整合,以便在Web应用程序中实现一个功能强大的富文本编辑器。这个集成的Demo将帮助开发者解决后端配置问题,确保文件上传功能正常运行。 ...
在UEditor的配置文件config.json中,需要设置imagePathFormat图片保存的路径和imageUrlPrefix返回的结果标记。imagePathFormat是指图片保存的路径,imageUrlPrefix是指图片的URL前缀。在配置imageUrlPrefix时,需要...
如果通过百度Ueditor直接将图片上传到服务器上,当你重新发布项目到服务器上,容易造成图片的丢失!为了防止该事件的发生,尽量将图片上传到磁盘上或者独立存图片的服务器上!通过修改百度Ueditor源码实现
安装时,只需按照官方提供的文档步骤,将相关文件上传至服务器并配置好相关参数,即可在网页中调用UEditor。 总的来说,百度UEditor是一款功能全面、性能稳定的在线编辑器,无论是对于个人博客还是企业级应用,都能...
在Java环境中,这个JAR文件可能被用来集成UEditor到Web应用中,提供服务器端对UEditor上传图片等操作的支持。 **备注.txt** `备注.txt`文件通常用于存放开发者或维护者对项目的一些说明或注意事项。在这个上下文中...
在这个例子中,我们检查了上传文件是否为空,然后生成一个唯一的文件名以防止重名,并将其保存到指定的服务器路径。最后,我们返回一个JSON对象,其中包含了ueditor需要的状态信息(如成功或失败)和上传文件的URL,...
在ASP.NET中,静态资源如CSS、JavaScript文件通常被映射到虚拟路径,而UEditor的配置可能需要绝对路径。因此,我们可能需要去除或转换这些路径,以确保编辑器能够正常工作。这可能涉及到IIS的配置或者代码中的路径...
- **定制配置**:在UEditor的配置文件(如`ueditor.config.js`)中设置,添加对135编辑器样式的引用,确保在编辑器启动时加载这些样式。 - **实现接口交互**:可能需要编写JavaScript代码来实现UEditor与135编辑...