news 2026/10/8 20:28:10

UEditor批量Word编辑实战:混合解析与公式表格处理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
UEditor批量Word编辑实战:混合解析与公式表格处理

做互联网公司内部的内容后台、OA系统或者知识库,总会撞上同一个需求:运营拿着一堆Word文档,往网页编辑器里一拖,要求格式不丢、图片能传、表格能改,最好连公式都给你还原出来。很多团队第一个想到的就是UEditor,毕竟它带Word粘贴清洗功能,项目里集成了就能用。但真到了“批量编辑”这种规模化场景,UEditor默认那点能力远远不够。我自己在不同公司做过好几轮这种功能,从纯前端解析到后端兜底,踩过不少坑,也沉淀了一套相对成熟的方案。这篇就围绕“互联网公司如何实现ueditor的Word批量编辑功能”这件事,把需求拆解、技术选型、公式和表格处理、以及一堆杂七杂八的边界问题一次讲透,适合正在做富文本编辑器、内容中台、在线文档的工程师参考,也方便技术负责人评估工时。

1. 需求拆解:批量Word编辑到底在解决什么问题

1.1 先搞清楚“批量编辑”不是“批量存储”

我见过不少人对这个功能的理解是:把多个Word文件一次性上传到服务器,文件存起来,前端能下载,完事。这完全跑偏了。如果只是文件存取,用不到UEditor,做个文件管理模块就行。真正的批量Word编辑,指的是下面这条链路:

多个Word文档一次性拖入 → 每个文档被解析成可编辑的HTML → 转化后的内容放进富文本编辑器 → 用户在线二次修改 → 保存为结构化内容 → 可选导出回Word。

这个需求背后还隐藏着三个业务要求。第一是格式保持,Word里的标题层级、段落缩进、表格边框、图片大小,转入网页后不能一团糟。第二是内容可检索,转换后的文本必须进入编辑器的存储层,能被搜索、被索引,而不是作为附件躺在文件库里。第三是图片要上云,文档里那些本地图片必须转存到对象存储,否则后续展示、分享、迁移都会出问题。

1.2 UEditor在整个方案里的定位

UEditor在这里的角色,是编辑器的宿主外壳和操作层。批量编辑功能真正的难点,不在UEditor本身,而在它前面的“导入管线”:

Word文件 → 解析服务 → 生成HTML片段 → 清洗过滤 → 插入UEditor的content → 在线编辑 → 保存 → 结构化存储。

UEditor负责“插入content”和“在线编辑”这两步。前面的解析和清洗,都需要我们自己搭建。很多人觉得UEditor自带wordimage插件就够了,这里要泼一盆冷水:wordimage是给“单篇粘贴”场景用的,它处理的是剪贴板里已经复制的网页碎片,最典型的是从网页复制内容粘贴时对图片的转存处理。多文件拖拽、批量异步解析、每个文件的独立错误提示,这些UEditor不提供,必须自己做。

1.3 常见的业务场景盘点

从实际项目来看,批量Word编辑的需求主要集中在这几类场景:

  • 内容中台:运营批量上传已排好版的Word稿件到CMS,统一调样式后多渠道发布。
  • OA办公:HR汇总各部门提交的Word版周报,合并成一个可在线协作的团队文档。
  • 教学平台:老师上传试题Word,系统自动拆题入库,形成在线题库。
  • 招聘系统:HR批量导入各业务线的JD Word文档,生成标准化的职位发布页面。

这些场景的共同点是文件数量大、格式五花八门、页面里大量图片和表格。如果让人工一篇篇复制粘贴到网页编辑器里,运营不出三天就会把需求单甩到技术团队脸上。所以这个功能看着朴素,做出来之后,业务同学的幸福感提升是肉眼可见的。

2. 技术方案选型:前端解析、后端解析还是混合模式

2.1 纯前端方案:省事但天花板低

前端解析主要靠在浏览器里解压docx文件。最常见的是用Mammoth.js,它是专门把.docx转换为HTML的JS库,解析速度快,对页边距、段落、表格这类基础结构支持得不错。前端解析的最大优势是不占用后端接口压力,用户的文件不出浏览器就能看到转换预览,体验很顺滑。

但纯前端的短板也很明显。公式支持一塌糊涂,Mammoth对Word里的OMML公式基本忽略,转出来就是空白。大文件会卡浏览器,几MB的docx在低配办公电脑上转起来,页面直接无响应。安全性也没法兜底,如果用户上传的是带宏的.doc文件,前端根本处理不了。浏览器兼容性还得踩一阵子坑,老版本Edge、某些企业内网Chromium对FileReader和Blob的处理都存在差异。

我的结论是:纯前端方案只适合内容结构简单、公式少、文件小的内部场景。如果业务方明确说“试卷里全是公式”,就别想偷懒了。

2.2 后端解析方案:重但稳

后端解析主流有两条路线:Java体系用Apache POI,Python体系用python-docx或者直接拿lxml去操作document.xml。后端解析的好处是处理能力强,可以干一些前端干不了的重活,包括公式转换、宏隔离、字体检测、图片统一压缩上传。而且前端逻辑非常干净,发一个multipart请求,后端返回一段清洗好的HTML,赋值给编辑器即可。

我印象很深的一个项目,第一版图省事选了纯前端解析,运营上传了一批含MathType公式的物理试卷Word,前端转出来的公式全是空白,页面上一排排红色问号。后来紧急加了一个Java服务用POI做OMML解析,才把公式问题解决。从那以后我学到一个教训:在拿不准文档复杂度的时候,低成本的纯前端方案很容易被现实击穿。

2.3 我的最终选型:混合模式

目前我在生产环境跑的是混合模式,整体思路是:

  • 前端先用Mammoth.js做快速解析,把普通正文、图片、表格先转出来,让用户秒看到预览,不用干等。
  • 上传的同时,把原始文件异步提交到后端的Java解析服务,用POI做深度解析,覆盖公式、嵌套表格、VML图形、页眉页脚这些高级元素。
  • 后端解析完成后,如果内容更完整,就把前端预览里对应区块替换掉,并显示一个“已深度处理”的标记。

这套方案要维护两套解析逻辑,前期工作量会多一些。但换来的是用户体感快、复杂文档兜底稳。如果公司里就一个人维护这套系统,我还是建议做混合模式,因为一旦上线后遇到“这个Word转出来缺了一块”的投诉,纯前端方案连排查抓手都没有。混合模式至少能让你在后端日志里看到是哪一步丢了内容。

2.4 方案对比速查

维度纯前端解析后端解析混合模式
首屏速度快慢,依赖上传完成快,先预览后替换
公式支持弱强,可做OMML转换强
文件大小限制小,几MB就卡大,可异步处理大
安全性弱,宏无法隔离强,可检测docm并隔离强
开发成本低中高
维护成本中中稍高

3. 核心实现细节与实操要点

3.1 前端拖拽上传与Mammoth解析

批量编辑第一步是拖拽上传。这里有个关键细节:我们不是把文件直接丢给普通上传接口,而是拦截拖拽事件,逐个提取File对象,先走前端解析逻辑。实际操作中,我是在UEditor容器上手动监听drop事件,而不是依赖UEditor自带的附件上传,因为后者只能存文件,不能实时解析。

拖拽事件里要注意用dataTransfer.files,不要用dataTransfer.items,部分浏览器对items的遍历支持不完整。拿到文件后,核心解析代码长这样:

async function parseDocxAndInsert(file) { const arrayBuffer = await file.arrayBuffer(); const result = await mammoth.convertToHtml({ arrayBuffer }, { styleMap: [ "p[style-name='Title'] => h1:fresh", "p[style-name='Subtitle'] => h2:fresh", "p[style-name='Heading 1'] => h1:fresh", "p[style-name='Heading 2'] => h2:fresh", "p[style-name='Heading 3'] => h3:fresh", ], includeDefaultStyleMap: true, convertImage: mammoth.images.imgElement(async (image) => { const buffer = await image.readAsArrayBuffer(); const blob = new Blob([buffer], { type: image.contentType }); const url = await uploadToServer(blob); return { src: url }; }) }); ue.execCommand('insertHtml', result.value); }

这段代码有三个注意点。第一,styleMap非常重要,Word文档里的标题默认映射到p标签,如果不在styleMap里映射成h1、h2,排版层级和SEO结构全部会乱。第二,convertImage里必须把图片走一遍上传接口换成云端URL,否则base64图片全塞进编辑器,内容体积会爆炸,几张图就能把接口返回撑到几MB。第三,Mammoth输出的HTML里可能还有样式残留,建议插入前再过一遍白名单过滤,只留font-family、line-height、text-indent这些关键样式。

3.2 后端POI批量解析接口

后端我用的是Java加Apache POI,接口设计很直接:

@PostMapping("/api/word/batch-parse") public ApiResult<List<ParseResult>> batchParse( @RequestParam("files") MultipartFile[] files) { List<ParseResult> results = new ArrayList<>(); for (MultipartFile file : files) { ParseResult r = new ParseResult(); r.setOriginalName(file.getOriginalFilename()); try { r.setHtml(WordToHtmlConverter.convert(file.getInputStream())); r.setStatus("success"); } catch (Exception e) { r.setStatus("error"); r.setErrorMsg(e.getMessage()); } results.add(r); } return ApiResult.ok(results); }

POI转换的核心是XWPFDocument。遍历段落时,普通段落直接提取文本和样式,表格单独走XWPFTable的解析逻辑。这里提醒一句:POI对纯文本、基础表格和段落样式的解析很稳,但对Word里嵌入的OLE对象、Visio图、SmartArt,拿到的往往是空壳或者占位符。如果业务里高频出现这类文档,就得额外加一个DocumentFormat转换服务做兜底,或者直接跟业务方确认能接受降级为预览图。

3.3 POI设置Word表格单元格宽度的转换要点

热搜词里有一条“poi设置word表格单元格宽度”,确实是高频坑。POI里XWPFTableCell.getWidth()拿到的宽度单位是dxa,也就是twips,1英寸等于1440 twips。转HTML时,如果直接把这个数字填成像素,宽度会差一大截。我用的换算方法是:

// twips 转 css px,96是浏览器默认CSS像素密度 public static int twipsToPx(int twips) { return (int) (twips * 96.0 / 1440.0); }

另一个容易踩的坑是gridSpan。Word表格里单元格有跨列属性,转换时如果不展开,HTML表格的行列数对不上,整个表格会碎掉。我在转换表格前会遍历每一行的单元格,检测gridSpan并展开成对应的colspan属性。否则表格在UEditor里一编辑,合并单元格就全乱套了。

3.4 HTML清洗:白名单过滤是最后一道防线

Word转出来的HTML远比想象中脏。不管用Mammoth还是POI,转换结果里都可能有这些东西:

  • <o:p>、<w:...>这类命名空间残留标签。
  • class="MsoNormal"、style="mso-*"这些Word专属标记。
  • 大量连续的空段落<p></p>。
  • 多层无意义的<span style="font-family: Times New Roman">包裹。

清洗这一步必须放在插入编辑器之前,因为UEditor内部的过滤规则相对粗糙,容易误删表格边框和行距这类有效样式。我维护了一张正则替换表,把命名空间标签删掉、mso-属性去掉、连续空段落压缩成一个。清洗之后,HTML体积通常能压缩50%以上,UEditor渲染起来也轻快很多。

3.5 前后端批量接口的约定

批量功能意味着前端要把多个文件的解析请求一次发出,后端再按顺序返回。我这里的接口约定是:

{ "files": [ { "index": 0, "originalName": "调研报告.docx" }, { "index": 1, "originalName": "季度总结.docx" } ], "options": { "parseFormula": true, "compressImage": true, "maxImageWidth": 1200 } }

后端返回时按index对应顺序返回HTML片段,前端拿到后按顺序插入UEditor,中间用分隔符隔开。这个分隔符我一开始用<hr>,结果运营误以为文档自带分割线,后来改成了编辑器书签标记<span id="batch-sep-1"></span>,这样保存时还能定位分节位置,也方便做“批量文档内导航”。

4. 复杂内容处理:公式、表格、图片、字体与宏

4.1 Word公式的处理:OMML到MathJax的链路

Word里的公式在docx中以OMML(Office Math Markup Language)存储,UEditor本身不支持OMML渲染。前端Mammoth对OMML完全忽略,所以纯前端方案遇到公式就会空白。后端要做的,是把OMML转换为MathML或LaTeX,交给前端MathJax渲染。这条链路我实际跑下来是相对成熟的。

Java后端可以遍历XWPFDocument里的XWPFOMath对象,提取OMML字符串后,通过mathml2latex或者MML2TeX类库把MathML转LaTeX。Python后端可以用lxml直接操作docx里的m:oMath节点,然后配合latex2mathml做反转换。如果不想写那么多代码,也可以用pandoc一键转换:

pandoc input.docx -t latex --mathml -o output.html

但pandoc不能作为每条请求的实时解析依赖,太重了。生产环境我用的方案是POI提取OMML加一个自研的OMML到LaTeX映射表,只覆盖常见公式结构,比如分式、根号、上下标、求和、积分、矩阵。遇到不认识的结构,兜底策略是把该公式区域渲染成图片,上传到云存储后前端用img标签占位。

我这里强烈建议保留兜底这一步。数学公式种类几乎无限,一个映射表不可能覆盖全部场景。只要公式不丢、能显示、能看清楚,业务方就已经很满意了。后续如果某些公式需要再编辑,再投入精力去补映射表也不迟。

4.2 公式图片转Word与OCR识别

热搜词里有“公式图片转word”,这是知识管理系统的常见痛点。用户在Word里用公式编辑器生成的公式,如果被另存成了图片,后续就再也不能编辑了。批量导入时,如果遇到公式图片,我的建议是接一路OCR公式识别接口,把图片识别成LaTeX再转成MathJax可渲染的结构。即使OCR出来的结果不够完美,也比一张死图片强,至少用户还能手动改。

市面上几家大厂的公式OCR接口我都试过,对印刷体公式识别率都比较高,手写体就差一些。考虑到成本,我把它设置为可选项,只有文档里检测到大量公式图片时,运营才会勾选“识别公式图片”。这样能控制调用量,也符合实际使用习惯。

4.3 表格列宽那点破事

热搜词里有一条“word表格列宽无法拖动”,这个在UEditor里非常常见。原因主要有三种:

  • Word导出的HTML里,表格单元格没写显式宽度,浏览器默认均分列宽。
  • Word表格宽度是dxa单位,转换时没换算成CSS像素,导致宽度忽大忽小。
  • UEditor的过滤规则把单元格的style给删掉了。

我的处理方案是后端转换表格时直接输出<colgroup>加<col style="width:xxpx">的结构,同时给table设置border-collapse: collapse。这样能解决大部分列宽问题。剩下的20%是UEditor在线编辑时会重新生成一层<table style="width:100%">包裹,导致列宽再次被重分配。这个没法根治,我做了个“锁定列宽”按钮,每次表格被修改后自动重设colgroup宽度,算是个workaround。

4.4 图片处理策略

批量编辑里的图片处理是性能瓶颈的重灾区。如果直接把base64图片塞进编辑器,几MB的docx解析出来光图片就有几十MB,前端直接卡死。图片必须统一走上传服务。我在前后端各处理了一次:

  • 前端:Mammoth的convertImage回调里上传。
  • 后端:POI解析到XWPFRun.getEmbeddedPictures()时,逐个写为临时文件再调OSS接口上传。

上传策略上,超过2MB的图片强制压缩到1200px宽,JPEG质量设为0.85。这里有个细节很容易被忽略:同一张图片在Word文档里可能被引用多次,后端解析时要做MD5去重,相同MD5只上传一次,后续引用直接复用URL,否则一个文档可能产生几十个重复图片对象。

4.5 字体不一致问题与字体映射

热搜词里有一条和字体相关:“安装了一个wechat字体,word里面认,ps里却不认”。这个问题在批量编辑里的表现是:Word里用的字体,转成HTML后浏览器不认,文字全部回退成默认字体。原因是Word按字体族名匹配并做字体替换,浏览器按CSS字体族解析,中文字体的命名不一致非常普遍。

我的处理方案是建立字体映射表,把常见中文字体映射到Web安全字体或公司自建的WebFont。例如宋体映射为SimSun, STSong, serif,微软雅黑映射为Microsoft YaHei, PingFang SC, sans-serif。转换时统一替换font-family字符串。如果公司有付费字体授权,可以直接在CSS里引入woff2字体文件,浏览器渲染效果会接近原生Word。

4.6 宏安全与.doc格式处理

“word宏安全问题”也是批量导入服务必须考虑的点。宏只能存在于.doc或.docm文件里,.docx本身不允许存宏。批量导入服务要做的第一件事,就是判定文件扩展名和真实格式。用户上传一个xxx.doc,不能直接丢给POI解析,因为POI对老格式.doc的兼容性远不如.docx。

我的做法分两步。第一步用Apache Tika检测文件真实MIME类型,区分doc、docx、docm。第二步,对docm文件直接拒绝导入,对doc文件先转成docx再解析。转换可以用LibreOffice的headless模式:

soffice --headless --convert-to docx --outdir /tmp/input/ /tmp/input/old.doc

这个转换命令要放在权限隔离的目录里跑,防止宏相关的代码被执行。这里再强调一下,LibreOffice转换本身存在执行宏的风险,更稳妥的做法是在隔离容器里跑,或者用Aspose.Words这类商用库,它有明确的宏移除选项。

4.7 算法伪代码与代码块的识别

热搜词里有一条“算法伪代码通常如何输入和表示”。Word文档如果包含论文里的Algorithm环境,转换后基本就是一个普通段落,没有任何代码高亮。我在前端做了一个后处理:对连续的等宽字体文本块,自动包裹成<pre><code>结构,再挂载到Prism.js上做高亮。识别规则很简单,检查一段文本的字体是否包含Courier New、Consolas这类等宽字体,并且连续长度超过两行,就判定为代码块。这个规则粗糙但够用,实际跑下来误判率不高。

4.8 在线编辑后的Word导出

如果批量导入做得够好,用户一定会问反向的问题:“我编辑完了,能导出回Word吗?”前端可以用docx.js或html-docx-js生成docx,但涉及表格宽度、分页符、页眉页脚的精确控制时,前端库很难跟原生Word保持一致。更稳的做法是后端模板填充:前端把编辑器的HTML结构提交,后端用POI或Freemarker模板渲染Word。这一步可以和批量导入共用一套格式映射逻辑,复用度比较高。

5. 常见问题排查与避坑实录

5.1 UEditor粘贴快捷键失效

有热搜词说“word不能使用快捷键粘贴”,这是UEditor的老毛病。UEditor在初始化iframe时,会把部分keydown事件拦截掉,导致Ctrl+V失效。排查思路是先把自定义的paste插件全部禁用,看Ctrl+V是否恢复。如果恢复,说明是某个拦截器在捣乱,逐个排除。

另一种情况是用户先从网页复制内容,再到Word文档里粘贴,浏览器安全策略会拦截剪贴板读取。这时可以在UEditor容器上挂一个自定义paste监听,读取剪贴板里的text/plain和Files,手动走批量解析流程,绕过系统粘贴拦截。

5.2 Word中嵌入的Visio图转换后丢失

热搜词“word的visio只有转换是怎么回事”是一个很经典的痛点。Word里嵌入的Visio对象在docx里不是普通图片,而是OLE对象加一个预览图。POI解析时getEmbeddedPictures()拿不到它,因为Visio对象不是图片。无法直接拿到对象,就只能退回预览图,或者用专业转换服务把OLE对象单独导出来。多数场景下运营能接受预览图,如果一定要求可编辑的Visio,那成本会很高,建议跟业务方讲清楚,这个不做。

5.3 批量导入时图片并发上传打满带宽

这个问题在批量场景里最容易出现。一次解析20个Word,每个文档30张图,前端并发上传600张图片,OSS倒能扛住,但浏览器网络和内存先炸。排查时打开Network面板,能看到大量pending请求堆积,CPU占用飙高。

解决思路是加一个图片上传队列,限流到3并发,把图片压缩放在上传之前做。另一个更稳的做法是后端解析时直接在服务端完成图片上传,前端只接收替换好URL的HTML,从根源上减少前端请求量。

5.4 常见问题速查表

问题现象主要原因排查和解决方向
Word转HTML后公式空白OMML未转换POI提取OMML,转MathML或LaTeX,前端MathJax渲染
表格列宽错乱或无法拖动twips未转px、无colgroup后端显式输出colgroup,twips换算px,锁定列宽按钮
图片全是base64导致页面卡未走上传服务替换URLMammoth的convertImage或POI图片提取后统一上传
doc文件解析失败POI对老格式兼容差先用LibreOffice转docx再解析
宏敏感文件被导入未识别docm格式Tika检测真实MIME,docm文件拒绝导入
Visio嵌入图转换后空白OLE对象非普通图片用预览图替代,不承诺可编辑
粘贴Ctrl+V失效UEditor拦截或浏览器限制关闭冲突插件,自建paste监听
字体转HTML后回退默认字体中文字体命名不一致建立字体映射表,引入WebFont

5.5 我踩过最深的坑:样式清洗不能一刀切

Word转换的HTML里,<p style="line-height:150%">、<span style="font-size:14pt">这些内联样式,清洗时不能全部删掉。全删了,Word排版信息就没了;全保留,UEditor的渲染会越来越臃肿。我最后定的策略是维护白名单样式:font-family、font-size、line-height、text-align、background-color、color、margin、padding、text-indent,其他样式一律过滤。这个白名单在实践里能覆盖九成以上的Word排版信息,同时把HTML体积压下来很多。

6. 能跑通的生产环境架构参考

为了让上面这些内容更好落地,我画一下目前生产环境的模块划分,虽然不涉及具体代码细节,但按这个结构去搭能少走弯路。

前端模块包含四块:拖拽上传队列、Mammoth预览解析、UEditor容器集成、图片上传限流。后端模块包含四块:POI深度解析、OMML公式转换、HTML清洗过滤、图片转存与去重。异步处理上,批量导入接口先同步返回“已接收”,后台解析完再通过WebSocket或轮询推送解析结果。这样能避免用户长时间等待接口响应。

关于异步还是同步,我的经验是:文件总数少于5个时同步问题不大,超过5个就用异步,否则运营的浏览器要卡死至少半分钟。我们线上是10个文件以内走同步,超过10个走异步队列,用户能看到一个任务进度条。

这个架构在内部系统上跑了一年多,日均处理三四百个Word文档,算得上稳定。中间也翻过车,比如有一版清洗正则写得太激进,把Word里的上标和下标全删了,被技术团队的人自己写了篇文章吐槽。从那以后,清洗规则全部加了单元测试,每条规则至少覆盖一个真实Word样例。

如果你现在正处于选型阶段,我给的建议是:第一版不要贪多,先支持docx格式、基础表格、图片上传这老三样,公式可以走图片兜底;跑通之后再逐步上OMML解析、宏隔离、字体映射这些高级能力。批量编辑功能做得不好,业务方会觉得“导入还不如手敲”;做得好,他们真的会把这个功能当成日常工作中离不开的拐杖。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/8 20:27:55

用C#开发西门子PLC调试助手:S7协议通讯与批量读写实战

1. 项目背景与整体设计思路 1.1 做电气调试这么久&#xff0c;为什么还要自己写一个PLC小助手 先交代一下我为什么动手做这个软件。干自动化这一行&#xff0c;现场调试的日子大家都懂&#xff1a;笔记本里装着一整套TIA博图或者Step7&#xff0c;改程序、下程序、监控变量&am…

作者头像 李华
网站建设 2026/10/8 20:25:15

macOS运维实战:SecureCRT for Mac的会话管理、日志与自动化脚本

简介&#xff1a;SecureCRT for Mac 是 macOS 平台上一款常用的 SSH/Telnet 终端连接工具&#xff0c;面向需要远程管理 Linux 服务器、网络设备或运行命令行程序的开发与运维人员。资源包共 822 个文件&#xff0c;压缩后约 30.45MB&#xff0c;主要包含 htm 格式的帮助文档、…

作者头像 李华
网站建设 2026/10/8 20:24:23

Agent-Reach:大模型时代AI Agent工具调用连接层的架构与实践

1. 项目定位&#xff1a;为什么我会做 Agent-Reach 这个项目 做 Agent 开发这两年&#xff0c;我最大的感受是&#xff1a;模型能力本身已经不是瓶颈了&#xff0c;真正卡住项目的是 Agent 和外部世界的连接。你有一个聪明的 Agent&#xff0c;但它调用不了公司内部的订单接口&…

作者头像 李华
网站建设 2026/10/8 20:23:47

ESXi 8.0下瑞昱螃蟹卡断流排查与修复指南

手里一台退役台式机改成的ESXi 8.0宿主机&#xff0c;主板是B450M&#xff0c;板载一颗RTL8111H加一颗RTL8125BG&#xff0c;典型的“双螃蟹”组合。ESXi 8.0官方支持列表里根本没这两颗卡的影子&#xff0c;我按社区惯例把瑞昱驱动集成进安装ISO&#xff0c;忙活了一晚上终于装…

作者头像 李华
网站建设 2026/10/8 20:22:25

Ubuntu 24.04部署MySQL/Redis/Nginx与自动备份全记录

最近给一台全新的 Ubuntu 24.04 LTS 做了一次完整的环境部署&#xff0c;从裸系统一路装到 MySQL、Redis、Nginx 三件套全部跑通业务服务&#xff0c;再把自动备份补上。这套流程我前前后后走过很多遍&#xff0c;每次都能踩出一两个新坑&#xff0c;这次索性把所有操作和踩坑记…

作者头像 李华
网站建设 2026/10/8 20:21:45

基于LLM的高中语文作文自动批改:从提示词设计到本地部署全攻略

简介&#xff1a;基于LLM的高中语文作文自动批改应用项目面向高中语文教师与教育技术开发者&#xff0c;旨在解决传统作文批改耗时耗力的问题&#xff0c;提供了一套完整可运行的代码示例&#xff0c;便于教师或研究者快速验证自动批改效果。压缩包共18个文件&#xff0c;以5个…

作者头像 李华