1. 医院HIS系统CKEditor粘贴病历截图上传方案解析
在医疗信息化系统中,医生经常需要将病历截图粘贴到HIS系统的富文本编辑器中。这套基于PHP+CKEditor的解决方案,完美解决了Word/PDF等文档中的图片自动上传问题。下面我将从技术实现到避坑指南,完整分享这套系统的开发经验。
提示:本方案已在三甲医院稳定运行2年,日均处理图片上传请求超过5000次,特别适合对数据安全要求高的医疗场景。
1.1 核心需求分析
医疗场景下的文档图片上传有三大特殊要求:
- 格式复杂性:需要支持docx/pdf/ppt等各类文档中的图片提取
- 样式保留:病历文档中的表格、标注等样式必须完整保留
- 安全合规:必须符合医疗数据存储规范,且支持审计追溯
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术架构设计
2.1 整体方案选型
我们采用前后端分离架构:
code复制前端:Vue2 + CKEditor4(定制插件)
中间层:Node.js文档解析服务
后端:PHP7.4 + Laravel框架
存储:阿里云OSS(独立医疗存储桶)
数据库:MySQL8.0(医疗专有云)
选择CKEditor4而非5代版本的原因是:
- 医疗HIS系统多为传统B/S架构
- 现有系统插件生态基于CKEditor4
- 稳定性经过长期验证
2.2 核心组件说明
文档解析流程
mermaid复制graph TD
A[粘贴操作] --> B[提取文档二进制]
B --> C{文档类型判断}
C -->|Word| D[Mammoth.js解析]
C -->|PDF| E[PDF.js解析]
C -->|PPT| F[Office365接口]
D/E/F --> G[生成HTML+样式表]
G --> H[图片Base64转临时文件]
H --> I[上传OSS服务]
关键技术点
-
样式保留引擎:建立字体/字号映射表
json复制{ "font-family": { "宋体": "SimSun", "黑体": "SimHei" }, "font-size": { "五号": "10.5pt", "小四": "12pt" } } -
图片处理服务:
- 使用MD5校验去重
- 自动生成缩略图(病历文档常用300dpi)
- 添加水印(患者ID+操作时间)
3. PHP后端实现细节
3.1 上传接口核心代码
php复制// routes/api.php
Route::post('/medical/upload', function(Request $request) {
// 医疗数据特殊校验
$validator = Validator::make($request->all(), [
'file' => [
'required',
'file',
'mimes:png,jpg,jpeg',
'max:10240' // 医疗图片限制10MB
],
'patient_id' => 'required|exists:patients,id'
]);
if ($validator->fails()) {
return response()->json($validator->errors(), 422);
}
$file = $request->file('file');
$md5 = md5_file($file->getRealPath());
// 医疗数据存储路径规范
$path = 'medical/'.date('Y/m/d').'/'.$md5.'.'.$file->extension();
try {
// 使用医疗专用OSS实例
$oss = new OssClient(
config('oss.medical_key'),
config('oss.medical_secret'),
config('oss.medical_endpoint')
);
$oss->uploadFile(
config('oss.medical_bucket'),
$path,
$file->getRealPath(),
[
OssClient::OSS_H
