贵州PHP程序员的CMS编辑器插件大冒险
嘿,各位技术大佬们好!我是贵州山沟沟里爬出来的PHP程序员老王,最近接了个CMS企业官网的外包项目,客户爸爸提出了个"变态"需求——要在UEditor里实现Word/Excel/PPT/PDF一键导入,还要保留各种花里胡哨的格式,连LaTeX公式都要支持!这需求简直比让我用脚写代码还难啊!
需求分析(老板版)
客户说:“我们公司那些50多岁的领导,用Word写个新闻稿都要折腾半天,现在要他们学Markdown?不如让他们去造火箭!你们程序员不就是干这个的吗?给我搞个一键粘贴功能,要像微信复制粘贴那么简单!”
技术选型(穷鬼版)
- 前端:Vue3 CLI(白嫖的)
- 编辑器:UEditor(百度开源的,不要钱)
- 后端:PHP(我的老伙计)
- 存储:阿里云OSS(老板说超过100块就让我用自家硬盘)
- 预算:680元(够买两箱泡面+一箱红牛)
解决方案(山寨版)
前端部分(Vue3插件)
// src/plugins/ueditor-word-import.jsexportdefault{install(app,options){// 注册UEditor插件按钮UE.registerUI('wordimport',function(editor,uiName){constbtn=newUE.ui.Button({name:uiName,title:'Word导入',cssRules:'background-position: -726px -77px;',onclick:function(){// 调用后端APIconstinput=document.createElement('input');input.type='file';input.accept='.doc,.docx,.xls,.xlsx,.ppt,.pptx,.pdf';input.onchange=async(e)=>{constfile=e.target.files[0];if(!file)return;constformData=newFormData();formData.append('file',file);try{constres=awaitfetch('/api/ueditor/import',{method:'POST',body:formData});constdata=awaitres.json();if(data.success){editor.execCommand('insertHtml',data.content);}else{alert('导入失败:'+data.msg);}}catch(err){alert('网络错误:'+err.message);}};input.click();}});editor.addListener('ready',function(){editor.registerButton(uiName,btn);});returnbtn;},10);}}后端部分(PHP处理)
// api/ueditor/import.php'your-access-key','accessKeySecret'=>'your-secret-key','endpoint'=>'oss-cn-hangzhou.aliyuncs.com','bucket'=>'your-bucket-name'];// 接收文件if(!isset($_FILES['file'])){die(json_encode(['success'=>false,'msg'=>'没有上传文件']));}$file=$_FILES['file'];$tmpPath=$file['tmp_name'];$fileName=$file['name'];$fileExt=strtolower(pathinfo($fileName,PATHINFO_EXTENSION));// 简单验证文件类型$allowedTypes=['doc','docx','xls','xlsx','ppt','pptx','pdf'];if(!in_array($fileExt,$allowedTypes)){die(json_encode(['success'=>false,'msg'=>'不支持的文件类型']));}// 使用Mammoth.js处理Word(实际项目中应该用PHP库,这里简化处理)// 实际项目中建议使用PHPWord、PHPExcel等库functionconvertWordToHtml($filePath){// 这里应该是调用PHP库处理Word的代码// 由于预算有限,我们假装已经处理好了...return'转换后的标题这里是转换后的内容';}// 处理LaTeX公式(简化版)functionconvertLatexToMathml($latex){// 实际应该用专业库处理,这里只是示例$mathml=''.''.htmlspecialchars($latex).''.'';return$mathml;}// 模拟处理过程$content='';switch($fileExt){case'doc':case'docx':$content=convertWordToHtml($tmpPath);// 替换模拟的LaTeX公式$content=preg_replace_callback('/\\\$(.+?)\\\$/',function($matches){returnconvertLatexToMathml($matches[1]);},$content);break;// 其他文件类型处理...default:$content='暂不支持此文件类型的完整转换';}// 上传图片到OSS(简化版)functionuploadToOss($filePath,$originalName){global$config;try{$ossClient=newOssClient($config['accessKeyId'],$config['accessKeySecret'],$config['endpoint']);$object='ueditor/'.uniqid().'_'.basename($originalName);$ossClient->uploadFile($config['bucket'],$object,$filePath);return'https://'.$config['bucket'].'.'.$config['endpoint'].'/'.$object;}catch(OssException$e){returnfalse;}}// 模拟图片处理(实际项目中需要遍历HTML提取图片)$content.='';echojson_encode(['success'=>true,'content'=>$content]);?>部署方案(穷鬼版)
- 买台阿里云ECS最便宜的服务器(99元/年)
- 安装宝塔面板(免费)
- 上传代码到网站目录
- 配置Nginx反向代理
- 申请免费SSL证书(Let’s Encrypt)
- 泡杯茶,等待客户验收
群主の野望
各位大佬,看到这个项目是不是觉得很有前途?现在加入我的QQ群:223813913,不仅能:
- 免费领取1-99元红包(绝对不坑)
- 获得20%推荐提成(躺着赚钱)
- 参与技术讨论(吹牛不上税)
- 获取外包项目(真·有钱一起赚)
算笔账:
- 推荐10个客户 = 2000元提成
- 推荐100个客户 = 20000元提成
- 推荐1000个客户 = 200000元提成(够在贵阳买套房了!)
这比996香多了吧?赶紧加群,错过这村就没这店了!
免责声明
以上代码为简化示例,实际项目中需要:
- 添加完善的错误处理
- 实现真正的文件格式转换
- 加强安全性验证
- 优化性能
- 添加单元测试
但谁让咱们预算只有680元呢?能跑起来就行,要啥自行车!
复制插件目录
引入插件文件
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字段
点击查看详细教程
配置ImageMatch
匹配图片地址,如果服务器返回的是JSON则需要通过正则匹配
ImageMatch:'',点击参考链接
配置ImageUrl
为图片地址增加域名,如果服务器返回的图片地址是相对路径,可通过此属性添加自定义域名。
ImageUrl:"",点击查看详细教程
配置SESSION
如果接口有权限验证(登陆验证,SESSION验证),请配置COOKIE。或取消权限验证。
参考:http://www.ncmem.com/doc/view.aspx?id=8602DDBF62374D189725BF17367125F3
效果
编辑器界面
导入Word文档,支持doc,docx
导入Excel文档,支持xls,xlsx
粘贴Word
一键粘贴Word内容,自动上传Word中的图片,保留文字样式。
Word转图片
一键导入Word文件,并将Word文件转换成图片上传到服务器中。
导入PDF
一键导入PDF文件,并将PDF转换成图片上传到服务器中。
导入PPT
一键导入PPT文件,并将PPT转换成图片上传到服务器中。
上传网络图片
下载示例
点击下载完整示例