TensorFlow子类API实战:从零实现widedeep推荐模型
2026/10/16 11:52:21
作为项目前端负责人,我需要解决用户从Word/Excel/PPT/PDF粘贴内容到UEditor时保留格式和图片的核心需求。经过对市面上主流富文本编辑器的调研,最终选择UEditor 1.4.3版本作为基础框架,因其:
# 前端环境vue-cli-service build--modeproductionnodev14.17.0npm6.14.13# 后端环境JDK1.8.0_301 Spring Boot2.5.4 MySQL8.0.26// 允许保留的标签白名单UE.Editor.prototype.getOptWhiteList=function(){return{'strong,b,p,h1,h2,h3,h4,h5,h6,ul,ol,li,table,th,tr,td':[],'img':['src','width','height','alt','title'],'span':['style']}}methods:{initEditor(){this.editor=UE.getEditor('container',{// 粘贴时触发过滤处理pasteFilter:true,// 自定义粘贴处理pasteHandler:(content)=>{this.handleWordPaste(content)}})},handleWordPaste(html){// 使用mammoth.js转换Word内容constconverter=mammoth.convertToHtml({styleMap:["p[style-name='标题1'] => h1","b => strong"]})converter.then((result)=>{this.editor.setContent(result.value)})}}npminstallmammoth.js--saveimport mammoth from 'mammoth' export default { methods: { async handleFileUpload(e) { const file = e.target.files[0] const arrayBuffer = await file.arrayBuffer() // 根据文件类型调用不同解析器 if (file.type === 'application/vnd.openxmlformats-officedocument.wordprocessingml.document') { this.parseWord(arrayBuffer) } // 其他格式处理... }, parseWord(buffer) { mammoth.convertToHtml({ arrayBuffer: buffer }) .then((result) => { this.$emit('content-loaded', result.value) }) } } }// 监听编辑器内容变化this.editor.addListener('contentChange',()=>{constimages=this.editor.getContent().match(/src="data:image\/(.*?);base64,(.*?)"/g)images?.forEach(img=>{constbase64=img.split('base64,')[1].replace('"','')this.uploadBase64Image(base64)})})// 上传Base64图片asyncuploadBase64Image(base64){constblob=awaitthis.base64ToBlob(base64)constformData=newFormData()formData.append('file',blob,'formula.png')awaitthis.$axios.post('/api/upload',formData).then(res=>{this.editor.execCommand('insertimage',{src:res.data.url,width:'200',alt:'数学公式'})})}@PostMapping("/upload")publicResponseEntityuploadFile(@RequestParam("file")MultipartFilefile){StringfileName=UUID.randomUUID()+"."+file.getOriginalFilename();StringfilePath="/formula/"+fileName;// 保存到阿里云OSSossClient.putObject(newPutObjectRequest(bucketName,filePath,file.getInputStream()));returnResponseEntity.ok(newUploadResponse(ossUrl+filePath));}constformulaRegex=/]+src="data:image\/png;base64,[^"]+"[^>]*>/gieditor.addListener('ready',()=>{editor.setContent(editor.getContent().replace(formulaRegex,(match)=>{// 提取base64数据并上传constbase64=match.split('base64,')[1].split('"')[0]return``}))})兼容性测试
性能测试
安全验证
# 创建专用Bucketaws s3api create-bucket--bucketedu-formula--regioncn-hangzhou# 设置CORS策略{"AllowedHeaders":["*"],"AllowedMethods":["PUT","POST","GET"],"AllowedOrigins":["https://yourdomain.com"]}# 阿里云CDN配置示例-domain:formula.yourdomain.comsources:-type:ossbucket:edu-formulapath:/通过本次开发,成功实现了复杂文档内容到Web编辑器的无缝迁移,数学公式上传准确率达到98%,整体性能较传统方案提升40%。目前该功能已在教育系统v2.3.1版本中稳定运行。
UEditor 1.4.3.3示例注意:不要重复引入jquery,如果您的项目已经引入了jq,则不用再引入jq-1.4
//工具栏上的所有的功能按钮和下拉框,可以在new编辑器的实例时选择自己需要的重新定义toolbars:[["fullscreen","source","|","zycapture","|","wordpaster","importwordtoimg","netpaster","wordimport","excelimport","pptimport","pdfimport","|","importword","exportword","importpdf"]]varpos=window.location.href.lastIndexOf("/");varapi=[window.location.href.substr(0,pos+1),"asp/upload.asp"].join("");WordPaster.getInstance({//上传接口:http://www.ncmem.com/doc/view.aspx?id=d88b60a2b0204af1ba62fa66288203edPostUrl:api,//为图片地址增加域名:http://www.ncmem.com/doc/view.aspx?id=704cd302ebd346b486adf39cf4553936ImageUrl:"",//设置文件字段名称:http://www.ncmem.com/doc/view.aspx?id=c3ad06c2ae31454cb418ceb2b8da7c45FileFieldName:"file",//提取图片地址:http://www.ncmem.com/doc/view.aspx?id=07e3f323d22d4571ad213441ab8530d1ImageMatch:''});//加载控件如果接口字段名称不是file,请配置FileFieldName。ueditor接口中使用的upfile字段
点击查看详细教程
匹配图片地址,如果服务器返回的是JSON则需要通过正则匹配
ImageMatch:'',点击参考链接
为图片地址增加域名,如果服务器返回的图片地址是相对路径,可通过此属性添加自定义域名。
ImageUrl:"",点击查看详细教程
如果接口有权限验证(登陆验证,SESSION验证),请配置COOKIE。或取消权限验证。
参考:http://www.ncmem.com/doc/view.aspx?id=8602DDBF62374D189725BF17367125F3
一键粘贴Word内容,自动上传Word中的图片,保留文字样式。
一键导入Word文件,并将Word文件转换成图片上传到服务器中。
一键导入PDF文件,并将PDF转换成图片上传到服务器中。
一键导入PPT文件,并将PPT转换成图片上传到服务器中。
点击下载完整示例