You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
JDAirPort.Ems.Back/docs/Excel图片导入导出使用指南.md

6.2 KiB

Excel图片导入导出使用指南

技术方案概述

技术架构

  • 框架: RuoYi (SpringBoot + Vue + Redis + MyBatis)
  • 部署环境: 麒麟系统
  • 数据库: TiDB
  • Excel处理: Apache POI 4.1.2
  • 图片存储: 本地文件系统

核心功能

  1. Excel中嵌入图片的导出
  2. Excel中图片的提取和导入
  3. 图片文件的本地存储管理
  4. 数据库路径信息的维护

实现架构

1. 核心工具类

ImageExcelUtils.java

专门处理Excel图片操作的工具类

主要功能:

  • insertImageToCell(): 向Excel单元格插入图片
  • extractImagesFromSheet(): 从Excel提取所有图片
  • saveImageFromExcel(): 保存提取的图片到本地
  • isSupportedImageFormat(): 验证图片格式
  • cleanupTempImages(): 清理临时图片文件

支持格式:

  • JPG/JPEG
  • PNG
  • GIF (转换为JPEG)
  • BMP (转换为JPEG)

ExcelUtil.java (增强版)

集成图片处理功能的Excel工具类

新增功能:

  • setCellVo()中集成图片插入
  • importExcel()中集成图片提取
  • 自动处理图片的导入导出流程

2. 实体类配置

public class PowerEnergySparePartsRegistration {
    /** 图片位置 */
    @Excel(name = "图片位置", 
           cellType = Excel.ColumnType.IMAGE, 
           width = 30, 
           height = 80)
    private String imageLocation;
}

注解说明:

  • cellType = Excel.ColumnType.IMAGE: 指定为图片类型
  • width = 30: 单元格宽度
  • height = 80: 单元格高度

3. Controller层实现

新增接口

  1. 导入模板下载

    POST /ems/info/powerEnergyRegistration/importTemplate
    
  2. 数据导入(含图片)

    POST /ems/info/powerEnergyRegistration/importData
    参数: file (MultipartFile), updateSupport (boolean)
    
  3. 数据导出(含图片)

    POST /ems/info/powerEnergyRegistration/export
    

使用流程

导出流程

  1. 准备数据

    List<PowerEnergySparePartsRegistration> list = service.selectList(params);
    
  2. 设置图片路径 确保实体对象的imageLocation字段包含正确的图片路径

  3. 执行导出

    ExcelUtil<PowerEnergySparePartsRegistration> util = new ExcelUtil<>(PowerEnergySparePartsRegistration.class);
    util.exportExcel(response, list, "备件登记数据");
    
  4. 结果

    • 生成包含图片的Excel文件
    • 图片自动嵌入到对应单元格中
    • 图片尺寸根据注解自动调整

导入流程

  1. 上传Excel文件

    • 支持.xlsx和.xls格式
    • 文件中可包含嵌入的图片
  2. 图片提取

    List<PowerEnergySparePartsRegistration> list = util.importExcel(inputStream);
    
  3. 图片处理

    • 自动提取Excel中的图片
    • 保存到服务器本地路径: /profile/excel-images/
    • 生成唯一文件名避免冲突
  4. 数据验证

    • 验证必填字段
    • 验证图片格式
    • 检查重复记录
  5. 数据保存

    • 图片路径保存到数据库
    • 支持新增和更新模式

图片存储结构

存储路径

{ruoyi.profile}/excel-images/
├── 2025/01/28/
│   ├── uuid1.jpg
│   ├── uuid2.png
│   └── ...
└── ...

路径格式

  • 完整路径: /media/tao_iot/ruoyi/uploadPath/excel-images/2025/01/28/uuid.jpg
  • 数据库存储: /excel-images/2025/01/28/uuid.jpg
  • 访问URL: http://domain/profile/excel-images/2025/01/28/uuid.jpg

配置要求

1. 系统配置 (application.yml)

ruoyi:
  profile: /media/tao_iot/ruoyi/uploadPath

2. 权限配置

ems/info:powerEnergyRegistration:import
ems/info:powerEnergyRegistration:export
ems/info:powerEnergyRegistration:list

3. 文件系统要求

  • 确保上传目录有读写权限
  • 预留足够磁盘空间
  • 定期清理临时文件

错误处理

常见错误及解决方案

  1. 图片格式不支持

    • 错误: 图片格式不支持: xxx.tiff
    • 解决: 使用支持的格式 (jpg/png/gif/bmp)
  2. 文件路径不存在

    • 错误: 图片文件不存在: /path/to/image.jpg
    • 解决: 检查图片路径是否正确
  3. 权限不足

    • 错误: 创建图片存储目录失败
    • 解决: 检查文件系统权限
  4. 内存不足

    • 错误: OutOfMemoryError
    • 解决: 增加JVM内存或分批处理

异常处理机制

  1. 导入失败时自动清理临时图片
  2. 详细的错误信息反馈
  3. 事务回滚保证数据一致性
  4. 日志记录便于问题排查

性能优化建议

1. 图片处理优化

  • 控制图片尺寸 (建议 < 1MB)
  • 批量处理时分页处理
  • 使用图片压缩减少存储空间

2. Excel处理优化

  • 大数据量时使用SXSSFWorkbook流式处理
  • 设置合适的缓存行数 (默认500)
  • 及时释放资源避免内存泄漏

3. 麒麟系统优化

  • 使用本地高速存储
  • 配置合适的文件系统权限
  • 定期清理临时文件

安全考虑

1. 文件安全

  • 验证上传文件类型
  • 限制文件大小
  • 扫描恶意文件

2. 路径安全

  • 防止路径遍历攻击
  • 使用相对路径存储
  • 验证文件扩展名

3. 权限控制

  • 基于角色的访问控制
  • 操作日志记录
  • 敏感数据脱敏

测试用例

1. 功能测试

  • 导出带图片的Excel文件
  • 导入含图片的Excel文件
  • 图片格式验证
  • 错误处理机制

2. 性能测试

  • 大量数据导出性能
  • 大量图片处理性能
  • 并发访问压力测试

3. 兼容性测试

  • 不同Excel版本兼容性
  • 不同图片格式支持
  • 麒麟系统环境测试

维护指南

1. 日常维护

  • 监控磁盘空间使用
  • 清理过期临时文件
  • 检查错误日志

2. 故障排查

  • 检查文件系统权限
  • 验证图片路径正确性
  • 分析异常日志信息

3. 性能监控

  • 监控内存使用情况
  • 跟踪处理时间
  • 分析并发性能

扩展功能

1. 图片处理增强

  • 图片压缩
  • 格式转换
  • 水印添加

2. 存储扩展

  • 分布式文件存储
  • 对象存储集成
  • 图片CDN加速

3. 功能扩展

  • 批量图片处理
  • 图片预览功能
  • 历史版本管理