OctoberCMS站点迁移至自定义CMS,如何获取system_files表哈希图片路径
OctoberCMS图片实际路径获取方案及迁移可行性说明
首先可以明确:该操作完全可行,OctoberCMS的system_files表存储的哈希文件名对应资源路径有固定公开规则,不存在加密无法解析的问题。
下面提供两种适配不同场景的获取方案:
方案1:通过原生API获取(原OctoberCMS站点可正常运行时优先使用)
如果原站点还能正常启动,直接调用OctoberCMS内置的File模型方法即可快速拿到完整路径,无需手动拼接,准确率最高:
- 单文件查询可以在项目根目录运行
tinker命令执行代码:$file = \System\Models\File::find(你的文件记录ID); // 获取本地绝对路径 echo $file->getLocalPath(); // 获取对外可访问的URL路径 echo $file->getPath(); - 批量导出可以写一次性的执行脚本,遍历
system_files表全量记录,导出文件ID、原关联模型、原关联字段、实际路径、原文件名的映射表,后续迁移到自定义CMS时可以直接用映射表对应资源关联关系。
方案2:手动拼接路径(原站点无法运行、仅能读取数据库和站点源文件时使用)
OctoberCMS默认的文件存储路径有固定拼接规则,你可以直接通过system_files表的字段值拼出实际路径:
- 公共上传资源的默认基础路径为
storage/app/uploads/public,私有资源的默认基础路径为storage/app/uploads/protected,如果你之前修改过站点的文件存储磁盘配置,对应调整基础路径即可。 - 路径拼接规则:
取system_files表disk_name字段的前6个字符,每2个字符拆分为一级子目录,最终完整路径为:基础路径/[第1-2位字符]/[第3-4位字符]/[第5-6位字符]/disk_name字段完整值
举个例子:如果disk_name的值为62f18d7a9c3e_avatar.png,那完整公共资源路径为:storage/app/uploads/public/62/f1/8d/62f18d7a9c3e_avatar.png - 如果拼接后找不到对应文件,可以先找1-2条已知在前台可以正常访问的图片记录,对照源站目录调整分段规则即可,部分二开的OctoberCMS站点可能会修改目录分段逻辑,但核心都是基于
disk_name字段拆分,不会做额外加密。
迁移注意事项
- 导出路径时建议同步保留
system_files表的attachment_type、attachment_id、field字段值,这三个字段标识了当前图片关联的原业务模型、关联记录ID、对应模型字段,可以帮你快速把图片关联到新CMS对应的内容条目上。 - 所有资源迁移完成后可以通过映射表批量替换原站点内容里的图片链接,不用手动逐个修改。
内容的提问来源于stack exchange,提问作者JKSDS
相关产品推荐
相关产品推荐

