linux建设门户网站青海省公路建设服务网站

张小明 2025/12/30 0:28:40
linux建设门户网站,青海省公路建设服务网站,网站十大品牌,wordpress什么样Word图片一键转存功能开发全记录#xff1a;从需求调研到技术落地 一、需求背景与技术选型 作为软件工程专业大二学生#xff0c;暑期独立开发Word图片一键转存系统的初衷源于两个痛点#xff1a; 学术场景中#xff0c;教师需手动提取学生提交的Word文档中…Word图片一键转存功能开发全记录从需求调研到技术落地一、需求背景与技术选型作为软件工程专业大二学生暑期独立开发Word图片一键转存系统的初衷源于两个痛点学术场景中教师需手动提取学生提交的Word文档中的实验图片进行归档企业OA系统中Word格式的报销单需分离发票图片进行财务审核技术栈选型依据组件技术选型决策依据前端框架Vue2-cli学校课程已系统学习社区生态成熟适合快速原型开发富文本编辑器wangEditor轻量级核心包仅200KB支持自定义图片上传钩子与Vue2兼容性良好后端语言PHP阿里云ECS服务器预装LAMP环境可直接部署且PHP对文件流处理效率较高数据库MySQL与PHP天然适配支持BLOB类型存储二进制图片但考虑性能最终采用文件系统存储服务器阿里云ECS学生优惠套餐1核2G 1Mbps带宽提供安全组、RDS等企业级功能二、核心功能开发历程1. Word图片提取技术调研通过分析知乎专栏《一次性提取word文件中的图片》和微信公众平台《Word图片如何批量转存?》确定两种技术路线压缩包解压法将.docx重命名为.zip解压后从word/media/目录提取图片HTML转换法使用另存为HTML功能图片会保存在生成的文件夹中技术验证在本地使用Node.js编写测试脚本constfsrequire(fs);constAdmZiprequire(adm-zip);functionextractFromZip(docxPath){constzipnewAdmZip(docxPath);constmediaEntrieszip.getEntries().filter(entryentry.entryName.startsWith(word/media/));returnmediaEntries.map(entryzip.readFile(entry));}2. 前端实现Vue2 wangEditor2.1 编辑器集成参考wangEditor官方文档和CSDN博客《wangEditor的使用》实现核心配置// editor.config.jsimport{createEditor,createToolbar}fromwangeditor/editorexportdefault{initEditor(domId){consteditorConfig{placeholder:请上传Word文档...,MENU_CONF:{uploadImage:{server:/api/upload,// 实际使用PHP接口fieldName:word_file,maxFileSize:10*1024*1024,// 10MBallowedFileTypes:[.docx],customInsert(res,editor){// 解析PHP返回的图片URL数组consturlsres.data.map(img)editor.cmd.do(insertHTML,urls.join())}}}}returncreateEditor({selector:#${domId},config:editorConfig,mode:default})}}2.2 文件处理流程用户通过工具栏上传Word文件前端使用FormData封装请求asynchandleUpload(file){constformDatanewFormData()formData.append(word_file,file)try{constresawaitaxios.post(/api/parse,formData,{headers:{Content-Type:multipart/form-data}})this.editor.cmd.do(insertHTML,res.data.map(url).join())}catch(e){this.$message.error(解析失败e.message)}}3. 后端实现PHP MySQL3.1 文件解析服务参考阿里云部署教程搭建PHP环境后编写核心处理逻辑// api/parse.phpheader(Content-Type: application/json);$uploadDir/tmp/word_uploads/;if(!file_exists($uploadDir))mkdir($uploadDir,0777,true);$fileNameuniqid()..docx;$filePath$uploadDir.$fileName;if(move_uploaded_file($_FILES[word_file][tmp_name],$filePath)){$zipnewZipArchive();if($zip-open($filePath)TRUE){$images[];for($i0;$i$zip-numFiles;$i){$entry$zip-getNameIndex($i);if(preg_match(/^word\/media\/image\d\.(jpeg|jpg|png|gif)$/i,$entry)){$imageData$zip-getFromIndex($i);$imagePath/uploads/.uniqid()...pathinfo($entry,PATHINFO_EXTENSION);file_put_contents($_SERVER[DOCUMENT_ROOT].$imagePath,$imageData);$images[]$imagePath;}}$zip-close();unlink($filePath);// 删除临时文件echojson_encode([code0,data$images]);}else{echojson_encode([code500,msg文件解压失败]);}}else{echojson_encode([code400,msg文件上传失败]);}3.2 数据库设计采用MySQL存储图片元信息实际存储路径CREATETABLEword_images(idint(11)NOTNULLAUTO_INCREMENT,original_filenamevarchar(255)NOTNULL,storage_pathvarchar(512)NOTNULL,upload_timedatetimeDEFAULTCURRENT_TIMESTAMP,doc_idvarchar(64)DEFAULTNULLCOMMENT关联文档ID,PRIMARYKEY(id),KEYidx_doc_id(doc_id))ENGINEInnoDBDEFAULTCHARSETutf8mb4;4. 阿里云部署优化安全组配置开放80/443端口限制源IP为学校教育网段OSS对象存储将图片从ECS本地存储迁移至OSS配置CDN加速性能优化启用PHP-FPM进程池配置MySQL查询缓存使用Nginx的gzip_static压缩静态资源三、技术难点突破1. 大文件处理内存溢出问题当上传超过50MB的Word文件时PHP脚本因内存不足终止解决方案修改php.ini配置memory_limit 256M upload_max_filesize 100M post_max_size 100M采用流式处理替代完全加载到内存需升级至PHP 7.4使用ZipArchive的流式接口2. 图片排序混乱问题提取的图片顺序与Word文档中的排版不一致解决方案解析Word的[Content_Types].xml获取图片索引顺序修改PHP处理逻辑// 按文件名数字排序如image1.jpg, image2.jpg...usort($images,function($a,$b){preg_match(/image(\d)/,basename($a),$matchesA);preg_match(/image(\d)/,basename($b),$matchesB);return$matchesA[1]-$matchesB[1];});四、同行交流与资源整合1. 加入专业社群QQ群223813913Word文档处理技术交流获取到docx4j的Java实现参考但因环境限制最终采用PHP方案了解到Apache POI的XWPF组件为后续Java版本开发预留接口2. 开源项目参考百度UEditor其Word图片转存插件参考荆门泽优软件文档提供前端按钮集成思路wangEditor官方示例学习到多编辑器实例管理技巧实现主从编辑器联动3. 性能测试数据在阿里云1核2G环境下测试并发数平均响应时间成功率101.2s100%503.8s92%1008.5s78%优化措施引入Redis缓存解析结果针对重复文档对大文件启用异步处理队列RabbitMQ五、项目成果与展望1. 当前成果实现Word文档中图片的无损提取支持JPEG/PNG/GIF格式前端支持拖拽上传、实时预览、批量下载后端提供RESTful API可被其他系统集成2. 后续规划功能扩展增加PDF图片提取支持结合PDF.js实现图片OCR文字识别集成百度AI接口技术升级迁移至Vue3Vite架构后端改用Go语言提升并发性能商业化探索申请软件著作权已准备材料开发企业版增加权限管理、审计日志开发感悟这个项目让我深刻体会到技术选型要平衡学习成本与生产需求文件处理类项目必须做好异常流程设计如断点续传、文件校验参与开源社区交流能获得远超预期的技术支持附项目GitHub仓库地址及在线演示链接复制插件文件安装jquerynpm install jquery导入组件importEfromwangeditorconst{$,BtnMenu,DropListMenu,PanelMenu,DropList,Panel,Tooltip}Eimport{WordPaster}from../../static/WordPaster/js/wimport{zyCapture}from../../static/zyCapture/zimport{zyOffice}from../../static/zyOffice/js/o初始化组件//zyCapture ButtonclasszyCaptureBtnextendsBtnMenu{constructor(editor){const$elemE.$(div classw-e-menu>)super($elem,editor)}clickHandler(){window.zyCapture.setEditor(this.editor).Capture();}tryChangeActive(){this.active()}}//zyOffice ButtonclassimportWordBtnextendsBtnMenu{constructor(editor){const$elemE.$(div classw-e-menu>)super($elem,editor)}clickHandler(){window.zyOffice.SetEditor(this.editor).api.openDoc();}tryChangeActive(){this.active()}}//zyOffice ButtonclassexportWordBtnextendsBtnMenu{constructor(editor){const$elemE.$(div classw-e-menu>)super($elem,editor)}clickHandler(){window.zyOffice.SetEditor(this.editor).api.exportWord();}tryChangeActive(){this.active()}}//zyOffice ButtonclassimportPdfBtnextendsBtnMenu{constructor(editor){const$elemE.$(div classw-e-menu>)super($elem,editor)}clickHandler(){window.zyOffice.SetEditor(this.editor).api.openPdf();}tryChangeActive(){this.active()}}//WordPaster ButtonclassWordPasterBtnextendsBtnMenu{constructor(editor){const$elemE.$(div classw-e-menu>)super($elem,editor)}clickHandler(){WordPaster.getInstance().SetEditor(this.editor).Paste();}tryChangeActive(){this.active()}}//wordImport ButtonclassWordImportBtnextendsBtnMenu{constructor(editor){const$elemE.$(div classw-e-menu>)super($elem,editor)}clickHandler(){WordPaster.getInstance().SetEditor(this.editor).importWord();}tryChangeActive(){this.active()}}//excelImport ButtonclassExcelImportBtnextendsBtnMenu{constructor(editor){const$elemE.$(div classw-e-menu>)super($elem,editor)}clickHandler(){WordPaster.getInstance().SetEditor(this.editor).importExcel();}tryChangeActive(){this.active()}}//ppt paster ButtonclassPPTImportBtnextendsBtnMenu{constructor(editor){const$elemE.$(div classw-e-menu>)super($elem,editor)}clickHandler(){WordPaster.getInstance().SetEditor(this.editor).importPPT();}tryChangeActive(){this.active()}}//pdf paster ButtonclassPDFImportBtnextendsBtnMenu{constructor(editor){const$elemE.$(div classw-e-menu>)super($elem,editor)}clickHandler(){WordPaster.getInstance().SetEditor(this.editor);WordPaster.getInstance().ImportPDF();}tryChangeActive(){this.active()}}//importWordToImg ButtonclassImportWordToImgBtnextendsBtnMenu{constructor(editor){const$elemE.$(div classw-e-menu>)super($elem,editor)}clickHandler(){WordPaster.getInstance().SetEditor(this.editor).importWordToImg();}tryChangeActive(){this.active()}}//network paster ButtonclassNetImportBtnextendsBtnMenu{constructor(editor){const$elemE.$(div classw-e-menu>)super($elem,editor)}clickHandler(){WordPaster.getInstance().SetEditor(this.editor);WordPaster.getInstance().UploadNetImg();}tryChangeActive(){this.active()}}exportdefault{name:HelloWorld,data(){return{msg:Welcome to Your Vue.js App}},mounted(){vareditornewE(#editor);WordPaster.getInstance({//上传接口http://www.ncmem.com/doc/view.aspx?idd88b60a2b0204af1ba62fa66288203edPostUrl:http://localhost:8891/upload.aspx,License2:,//为图片地址增加域名http://www.ncmem.com/doc/view.aspx?id704cd302ebd346b486adf39cf4553936ImageUrl:http://localhost:8891{url},//设置文件字段名称http://www.ncmem.com/doc/view.aspx?idc3ad06c2ae31454cb418ceb2b8da7c45FileFieldName:file,//提取图片地址http://www.ncmem.com/doc/view.aspx?id07e3f323d22d4571ad213441ab8530d1ImageMatch:});zyCapture.getInstance({config:{PostUrl:http://localhost:8891/upload.aspx,License2:,FileFieldName:file,Fields:{uname:test},ImageUrl:http://localhost:8891{url}}})// zyoffice// 使用前请在服务端部署zyoffice// http://www.ncmem.com/doc/view.aspx?id82170058de824b5c86e2e666e5be319czyOffice.getInstance({word:http://localhost:13710/zyoffice/word/convert,wordExport:http://localhost:13710/zyoffice/word/export,pdf:http://localhost:13710/zyoffice/pdf/upload})// 注册菜单E.registerMenu(zyCaptureBtn,zyCaptureBtn)E.registerMenu(WordPasterBtn,WordPasterBtn)E.registerMenu(ImportWordToImgBtn,ImportWordToImgBtn)E.registerMenu(NetImportBtn,NetImportBtn)E.registerMenu(WordImportBtn,WordImportBtn)E.registerMenu(ExcelImportBtn,ExcelImportBtn)E.registerMenu(PPTImportBtn,PPTImportBtn)E.registerMenu(PDFImportBtn,PDFImportBtn)E.registerMenu(importWordBtn,importWordBtn)E.registerMenu(exportWordBtn,exportWordBtn)E.registerMenu(importPdfBtn,importPdfBtn)//挂载粘贴事件editor.txt.eventHooks.pasteEvents.length0;editor.txt.eventHooks.pasteEvents.push(function(){WordPaster.getInstance().SetEditor(editor).Paste();e.preventDefault();});editor.create();varedt2newE(#editor2);//挂载粘贴事件edt2.txt.eventHooks.pasteEvents.length0;edt2.txt.eventHooks.pasteEvents.push(function(){WordPaster.getInstance().SetEditor(edt2).Paste();e.preventDefault();return;});edt2.create();}}h1,h2{font-weight:normal;}ul{list-style-type:none;padding:0;}li{display:inline-block;margin:010px;}a{color:#42b983;}测试前请配置图片上传接口并测试成功接口测试接口返回JSON格式参考为编辑器添加按钮components:{Editor,Toolbar},data(){return{editor:null,html:dd,toolbarConfig:{insertKeys:{index:0,keys:[zycapture,wordpaster,pptimport,pdfimport,netimg,importword,exportword,importpdf]}},editorConfig:{placeholder:},mode:default// or simple}},整合效果导入Word文档,支持doc,docx导入Excel文档,支持xls,xlsx粘贴Word一键粘贴Word内容自动上传Word中的图片保留文字样式。Word转图片一键导入Word文件并将Word文件转换成图片上传到服务器中。导入PDF一键导入PDF文件并将PDF转换成图片上传到服务器中。导入PPT一键导入PPT文件并将PPT转换成图片上传到服务器中。上传网络图片一键自动上传网络图片自动下载远程服务器图片自动上传远程服务器图片下载示例点击下载完整示例
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

大连金州代做网站公众号设计师服务平台下载不了

第一章:工业机器人Agent精度的核心定义与行业标准工业机器人在现代智能制造中扮演着关键角色,其执行任务的准确性直接依赖于“Agent精度”这一核心性能指标。此处的Agent并非传统软件代理,而是指集成感知、决策与控制能力的智能控制单元&…

张小明 2025/12/26 12:16:49 网站建设

在建设银行网站申请完信用卡吗h5设计是什么

LobeChat与Notion集成:自动记录会议纪要 在远程办公成为常态的今天,团队每天可能参与多场线上会议——项目同步、需求评审、客户沟通……会后却总面临同一个难题:谁来整理纪要?手动记录不仅耗时费力,还容易遗漏关键信息…

张小明 2025/12/26 12:16:14 网站建设

景区智慧旅游网站建设seo黑帽是什么意思

3分钟掌握LOOT:天际模组排序终极指南 【免费下载链接】skyrimse The TES V: Skyrim Special Edition masterlist. 项目地址: https://gitcode.com/gh_mirrors/sk/skyrimse LOOT模组排序工具是《上古卷轴V:天际 特别版》玩家必备的智能排序系统。它…

张小明 2025/12/26 12:15:42 网站建设

网站网页设计怎么报价百度域名查询入口

鹰速光电公司的Cameralink图像采集卡软件,转usb的采集卡, Espeedgrab软件使用方法【1.开始采集】。 一千多元的工业级图像采集卡,可以替代万元的 pleora的iport cl-u3的,而且很多场合可替代dalsa采集卡。 EspeedGrab-3保存采集参…

张小明 2025/12/26 12:14:36 网站建设

品牌网站建设9小蝌蚪9a腾讯视频网站源码

Python GIS开发终极指南:零基础快速构建地理信息系统 【免费下载链接】Hello-Python mouredev/Hello-Python: 是一个用于学习 Python 编程的简单示例项目,包含多个练习题和参考答案,适合用于 Python 编程入门学习。 项目地址: https://gitc…

张小明 2025/12/28 7:39:00 网站建设