本项目由江西铁路行业集团公司主导,旨在对企业网站后台管理系统进行功能升级。作为项目负责人,主要任务是实现文章发布模块的三项新增功能:支持Word内容直接粘贴、导入本地Word文档,以及从微信公众号复制内容并自动处理图文资源。所有功能将通过在现有Web编辑器中集成插件按钮的方式完成,确保系统稳定性、跨平台兼容性及未来可维护性。
系统需完整支持国家信息技术应用创新环境,具体包括:
参与实施的软件厂商须具备以下条件:
为满足文档导入需求,在UEditor工具栏中注册自定义按钮,分别用于触发Word文件导入操作。通过动态添加隐藏输入框,实现文件选择与上传流程无缝衔接。
// 注册UEditor自定义按钮“Word导入”
UE.registerUI('wordImport', function(editor, uiName) {
var btn = new UE.ui.Button({
name: uiName,
title: 'Word导入',
onclick: function() {
document.getElementById('wordImportInput').click();
}
});
editor.addListener('ready', function() {
editor.afterConfigReady(function() {
editor.ui.add(btn);
});
});
return btn;
});
// 创建隐藏文件输入元素
var fileInput = document.createElement('input');
fileInput.type = 'file';
fileInput.id = 'wordImportInput';
fileInput.accept = '.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf';
fileInput.style.display = 'none';
fileInput.onchange = function(e) {
var file = e.target.files[0];
if (file) {
handleFileImport(file);
}
};
document.body.appendChild(fileInput);
// 文件上传处理逻辑
function handleFileImport(file) {
var formData = new FormData();
formData.append('file', file);
fetch('/api/upload', {
method: 'POST',
body: formData
})
.then(response => response.json())
.then(data => {
if (data.success) {
var editor = UE.getEditor('editor');
editor.setContent(data.content, true);
} else {
alert('导入失败: ' + data.message);
}
})
.catch(error => {
console.error('Error:', error);
alert('导入过程中发生错误');
});
}
针对微信文章排版复杂、图片外链多的问题,设计专用粘贴插件,自动识别剪贴板中的微信内容,提取正文并下载远程图片至本地服务器,再转换为内网链接插入编辑器。
UE.registerUI('wechatPaste', function(editor, uiName) {
var btn = new UE.ui.Button({
name: uiName,
title: '粘贴微信公众号内容',
onclick: function() {
// 启用剪贴板监听,解析微信HTML结构
navigator.clipboard.read().then(items => {
for (let item of items) {
if (item.types.includes('text/html')) {
item.getType('text/html').then(blob => {
blob.text().then(html => {
processWeChatContent(html, editor);
});
});
}
}
}).catch(err => {
alert('无法访问剪贴板: ' + err);
});
}
});
editor.ui.addButton('wechatPaste', btn);
return btn;
});
该功能核心在于对微信特有的HTML标签结构进行清洗和资源重定向处理,确保格式保留的同时提升加载速度与安全性。

function processWechatContent(html, editor) {
var tempDiv = document.createElement('div');
tempDiv.innerHTML = html;
var imgs = tempDiv.querySelectorAll('img');
var promises = [];
imgs.forEach(img => {
var src = img.src;
if (src.startsWith('http')) {
promises.push(downloadAndUploadImage(src).then(newUrl => {
img.src = newUrl;
}));
}
});
Promise.all(promises).then(() => {
editor.setContent(tempDiv.innerHTML, true);
});
}
function downloadAndUploadImage(url) {
return fetch(url)
.then(response => response.blob())
.then(blob => {
var formData = new FormData();
formData.append('file', blob, 'image.jpg');
return fetch('/api/uploadImage', {
method: 'POST',
body: formData
})
.then(response => response.json())
.then(data => {
if (data.success) {
return data.url;
} else {
throw new Error('图片上传失败');
}
});
});
}
// 监听粘贴事件
editor.addListener('paste', function(type, evt) {
var html = evt.html;
if (html) {
processWechatContent(html, editor);
}
});
editor.addListener('ready', function() {
editor.afterConfigReady(function() {
editor.ui.add(btn);
});
});
return btn;
1. 文件上传接口
用于处理 Word、Excel、PPT、PDF 等文档的上传及内容提取。
@WebServlet("/api/upload")
public class FileUploadServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Part filePart = request.getPart("file");
String fileName = filePart.getSubmittedFileName();
InputStream fileContent = filePart.getInputStream();
// 根据文件扩展名判断类型并提取内容
String content = "";
if (fileName.endsWith(".doc") || fileName.endsWith(".docx")) {
content = WordProcessor.extractContent(fileContent);
} else if (fileName.endsWith(".xls") || fileName.endsWith(".xlsx")) {
content = ExcelProcessor.extractContent(fileContent);
} else if (fileName.endsWith(".ppt") || fileName.endsWith(".pptx")) {
content = PptProcessor.extractContent(fileContent);
} else if (fileName.endsWith(".pdf")) {
content = PdfProcessor.extractContent(fileContent);
}
// 设置响应格式为 JSON
response.setContentType("application/json");
该逻辑实现了从剪贴板中获取带有图文的内容后,自动将外部图片下载并重新上传至本地服务器,同时保留原有格式结构。前端通过监听粘贴动作触发内容处理流程,而后端则提供统一接口支持多种办公文档的解析与数据返回,确保跨平台内容迁移的完整性与可用性。
@WebServlet("/api/getContent")
public class GetContentServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String content = extractContentFromWeChat(); // 模拟从公众号获取内容
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
response.getWriter().write(String.format("{\"success\": true, \"content\": \"%s\"}", escapeJsonString(content)));
}
private String escapeJsonString(String input) {
return input.replace("\\", "\\\\").replace("\"", "\\\"");
}
}
该接口用于处理从微信公众号提取的图片上传请求。
@WebServlet("/api/uploadImage")
public class ImageUploadServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Part filePart = request.getPart("file");
InputStream fileContent = filePart.getInputStream();
String fileName = filePart.getSubmittedFileName();
// 生成唯一文件名,保留原始扩展名
String uniqueFileName = UUID.randomUUID().toString() +
fileName.substring(fileName.lastIndexOf('.');
// 将文件流上传至阿里云OSS
String fileUrl = AliyunOssUtil.uploadFile(uniqueFileName, fileContent);
// 返回JSON格式的图片访问链接
response.setContentType("application/json");
response.setCharacterEncoding("UTF-8");
response.getWriter().write(String.format("{\"success\": true, \"url\": \"%s\"}", fileUrl));
}
}
封装了与阿里云对象存储服务(OSS)交互的核心方法,支持文件流上传功能。
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import java.io.InputStream;
public class AliyunOssUtil {
private static final String ENDPOINT = "your-oss-endpoint";
private static final String ACCESS_KEY_ID = "your-access-key-id";
private static final String ACCESS_KEY_SECRET = "your-access-key-secret";
private static final String BUCKET_NAME = "your-bucket-name";
public static String uploadFile(String objectName, InputStream inputStream) {
OSS ossClient = new OSSClientBuilder().build(ENDPOINT, ACCESS_KEY_ID, ACCESS_KEY_SECRET);
try {
ossClient.putObject(BUCKET_NAME, objectName, inputStream);
return "https://" + BUCKET_NAME + "." + ENDPOINT + "/" + objectName;
} finally {
ossClient.shutdown();
}
}
}
将前端资源进行构建打包后,部署至主流Web服务器环境,例如Nginx或Apache。
确保UEditor编辑器的配置文件中,API接口地址正确指向后端服务路径,以保障内容抓取和图片上传功能正常运行。
使用Eclipse JEE、MyEclipse或IntelliJ IDEA等Java开发工具导入完整项目工程。
根据实际环境修改数据库连接信息及阿里云OSS相关参数(如Endpoint、AccessKey等)。
完成配置后,将项目打包成WAR格式文件,并部署到Tomcat应用服务器中启动运行。
为满足国产化信息技术应用创新环境的需求,需验证以下组件在目标平台中的兼容性:
建议在正式部署前进行全面的功能与稳定性测试,确保系统可在指定信创平台上稳定运行。
支持的操作系统包括:Windows、macOS、Linux 以及基于 Linux 的多种国产操作系统,如 RedHat、CentOS、Ubuntu、中标麒麟、银河麒麟和统信UOS。
兼容的浏览器涵盖 IE8 及以上版本,同时支持奇安信安全浏览器、龙芯浏览器以及红莲花安全浏览器,确保在各类信创环境下稳定运行。
CPU 架构方面,适配主流的 x86 和 ARM 架构,并原生支持龙芯处理器,满足国产化硬件平台的部署需求。
参与项目的软件厂商须具备丰富的政企项目经验,需提交至少 5 个与央企、国有企业或政府事业单位成功合作的项目案例资料作为资格证明。
本方案旨在实现 Word 内容粘贴、Word 文档导入及微信公众号内容一键粘贴等功能,全面兼容多操作系统与主流浏览器环境,尤其针对信创国产化生态进行了深度优化。系统部署简便,无需改动现有架构,可显著提升用户操作便捷性与编辑效率。
UEditor 1.4.3.3示例
可通过初始化编辑器实例时自定义工具栏功能项,以下为推荐配置:
toolbars: [
[
"fullscreen",
"source",
"|",
"zycapture",
"|",
"wordpaster","importwordtoimg","netpaster","wordimport","excelimport","pptimport","pdfimport",
"|",
"importword","exportword","importpdf"
]
]
示例代码如下:
var pos = window.location.href.lastIndexOf("/");
var api = [
window.location.href.substr(0, pos + 1),
"asp/upload.asp"
].join("");
WordPaster.getInstance({
// 设置文件上传接口地址
PostUrl: api,
// 若返回图片路径为相对地址,可通过此参数补全域名
ImageUrl: "",
// 自定义上传字段名称,默认为 'file';若后端使用其他字段(如ueditor中的upfile),请修改此项
FileFieldName: "file",
// 图片地址匹配规则:当服务器返回JSON格式响应时,需通过正则提取图片URL
ImageMatch: ''
});
// 加载控件

编辑器界面展示 
支持导入 .doc 和 .docx 格式的 Word 文档 
支持导入 .xls 和 .xlsx 格式的 Excel 文件 
一键粘贴 Word 内容,自动上传文档内嵌图片并保留原有文字样式 
将 Word 文件整体转换为图片并上传至服务器 
PDF 文件一键导入并转为图片上传 
PPT 文件导入并转换成图片形式上传 
支持网络图片直接上传 
点击下载完整示例代码以获取详细实现细节。
扫码加好友,拉您进群



收藏
