`
cloudstars
  • 浏览: 40442 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

百度ueditor上传文件配置为TOMCAT虚拟路径,文件保存在应用外部

阅读更多

最近项目中用到了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() );

 

%>

  • 大小: 87.3 KB
  • 大小: 27 KB
  • 大小: 124.6 KB
  • 大小: 131.4 KB
  • 大小: 54.9 KB
分享到:
评论

相关推荐

    百度UEditor 支持tomcat虚拟路径映射

    总之,正确设置百度UEditor在Tomcat上的虚拟路径映射,不仅能让编辑器正常工作,还能提高Web应用的可维护性和扩展性。在实际操作中,可能还需要根据具体环境和需求进行微调,但基本的思路和步骤如上所述。希望这个...

    百度Ueditor编辑控件,修改图片存储路径为虚拟目录的后台文件controller.jsp(无需编译,替换简单设置即可)

    1.百度的ueditor上传控件,在上传图片时,默认只能存储在项目文件夹下,这样tomcat重新部署,有可能之前上传的文件就会丢失。 2.如果想把图片上传到项目目录之外的目录中,直接下载本controller.jsp,替换原...

    ueditor上传文件配置

    ueditor上传文件配置 ueditor是一个功能强大的富文本编辑器,广泛应用于各种Web应用程序中。其中,文件上传配置是ueditor的核心功能之一,本文将详细介绍ueditor上传文件配置的过程。 配置ueditor jar包 首先,...

    ueditor上传图片配置

    【标题】"ueditor上传图片配置"涉及到的是在SpringBoot框架下集成并配置ueditor,以便实现用户在编辑器中上传图片的功能。ueditor是一款流行的富文本编辑器,它提供了丰富的在线编辑功能,包括文字编辑、图片上传、...

    uEditor上传图片并保存为原文件名

    【标题】"uEditor上传图片并保存为原文件名"涉及的是在ASP.NET环境中使用uEditor编辑器进行图片上传,并确保图片文件以上传时的原始文件名存储的过程。uEditor是一个流行的富文本编辑器,广泛应用于网站内容管理系统...

    百度UEditor自定义上传图片存储路径为本地路径

    默认情况下,UEditor会将图片上传到其提供的服务器,但为了数据安全和性能优化,许多开发者会选择将图片保存在本地服务器。 二、自定义图片上传路径 1. 配置项修改:首先,你需要在UEditor的配置文件(通常名为`...

    UEditor JSP 版本配置以及文件上传配置方法

    在完成 UEditor 配置和文件上传配置后,需要在要嵌入的页面中引入 UEditor 的 js 文件,并将 textarea 内容替换为 UEditor。例如,可以使用以下代码: ```html &lt;script type="text/javascript" src="/ueditor/...

    ueditor基本配置、图片上传配置、文件上传配置

    在项目根目录`webroot`下,ueditor位于`/resources/ueditor`,图片上传的保存路径为`/upload`,附件的保存路径为`/uploadfile`。在`ueditor.config.js`中,根据这些路径调整`imageUrl`和`filePath`的值。 【前后端...

    百度的UEditor修改图片上传路径版

    4. 保存配置文件并刷新 UEditor 页面,图片上传时应遵循新的保存路径。 **注意事项** - 确保修改后的路径是可写的,否则图片上传会失败。 - 如果服务器有权限控制,需要确保 UEditor 运行的用户有足够的权限访问和...

    修改百度的UEditor,实现图片上传到项目外的路径

    然而,其默认配置通常将图片保存在项目的根目录下,这可能不适应所有应用场景。针对这个问题,我们将探讨如何修改UEditor的配置,使其能够实现以下两个目标: 1. **复制粘贴时保持图片原链接**: 当用户从其他网站...

    ueditor出现后端配置问题

    下一步,我们需要配置 config.json 文件,这个文件是 ueditor 编辑器的核心配置文件,我们需要将其放置在正确的路径下,以便 ueditor 编辑器能够正确地加载它。在这里,我们可以将 config.json 文件放置在 static ...

    百度UEditor编辑器之配置文件ueditor.config.js说明

    UEditor 配置文件说明,上传图片集成struts2配置,详见博客: http://blog.csdn.net/omsvip/article/details/23271167

    spring boot thymeleaf 整合 百度Ueditor 集成demo

    在本文中,我们将深入探讨如何将Spring Boot、Thymeleaf和百度Ueditor进行整合,以便在Web应用程序中实现一个功能强大的富文本编辑器。这个集成的Demo将帮助开发者解决后端配置问题,确保文件上传功能正常运行。 ...

    百度UEditor使用说明

    在UEditor的配置文件config.json中,需要设置imagePathFormat图片保存的路径和imageUrlPrefix返回的结果标记。imagePathFormat是指图片保存的路径,imageUrlPrefix是指图片的URL前缀。在配置imageUrlPrefix时,需要...

    解决百度ueditor编辑器将图片上传到非项目根路径(保存在磁盘上)修改源码版

    如果通过百度Ueditor直接将图片上传到服务器上,当你重新发布项目到服务器上,容易造成图片的丢失!为了防止该事件的发生,尽量将图片上传到磁盘上或者独立存图片的服务器上!通过修改百度Ueditor源码实现

    百度ueditor完整包

    安装时,只需按照官方提供的文档步骤,将相关文件上传至服务器并配置好相关参数,即可在网页中调用UEditor。 总的来说,百度UEditor是一款功能全面、性能稳定的在线编辑器,无论是对于个人博客还是企业级应用,都能...

    百度ueditor支持本地与FTP上传图片

    在Java环境中,这个JAR文件可能被用来集成UEditor到Web应用中,提供服务器端对UEditor上传图片等操作的支持。 **备注.txt** `备注.txt`文件通常用于存放开发者或维护者对项目的一些说明或注意事项。在这个上下文中...

    ueditor独立文件上传 .net示例

    在这个例子中,我们检查了上传文件是否为空,然后生成一个唯一的文件名以防止重名,并将其保存到指定的服务器路径。最后,我们返回一个JSON对象,其中包含了ueditor需要的状态信息(如成功或失败)和上传文件的URL,...

    百度ueditor编辑器 word导入功能(asp.net版本)

    在ASP.NET中,静态资源如CSS、JavaScript文件通常被映射到虚拟路径,而UEditor的配置可能需要绝对路径。因此,我们可能需要去除或转换这些路径,以确保编辑器能够正常工作。这可能涉及到IIS的配置或者代码中的路径...

    百度UEditor 整合135所需要的文件

    - **定制配置**:在UEditor的配置文件(如`ueditor.config.js`)中设置,添加对135编辑器样式的引用,确保在编辑器启动时加载这些样式。 - **实现接口交互**:可能需要编写JavaScript代码来实现UEditor与135编辑...

Global site tag (gtag.js) - Google Analytics