惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

爱范儿
爱范儿
Y
Y Combinator Blog
博客园 - Franky
D
Docker
B
Blog RSS Feed
M
MIT News - Artificial intelligence
雷峰网
雷峰网
博客园 - 司徒正美
人人都是产品经理
人人都是产品经理
宝玉的分享
宝玉的分享
S
SegmentFault 最新的问题
GbyAI
GbyAI
Recent Announcements
Recent Announcements
Martin Fowler
Martin Fowler
H
Hackread – Cybersecurity News, Data Breaches, AI and More
MyScale Blog
MyScale Blog
B
Blog
H
Help Net Security
Microsoft Security Blog
Microsoft Security Blog
WordPress大学
WordPress大学
Vercel News
Vercel News
The Cloudflare Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Google DeepMind News
Google DeepMind News

蛋蛋之家

SUMIFS和LET函数——让 Excel 自己动起来 Halo 博客晚间卡顿排查记:从"玄学卡顿"到"真凶落网" 我用这个开源项目,把 AI 绘画提示词变成了"代码"——awesome-gpt-image-2 深度体验报告 群晖部署 LX Music Server:浏览器就是你的音乐播放器【详细版】 500道Word题库太痛苦?于是我写了个智能学习平台 别用一个人的奔跑,耗尽两个人的余生——《你凭什么认为我会一直喜欢你呢》 博客评论自动填充新方案:兼容 Vue/React 响应式绑定与跨架构填充逻辑 2026 生产级指南:Halo 2.x + PostgreSQL 自动化部署与性能优化手册 从 Typecho 转向 Halo 2.x:全能型 Nginx 架构与 SEO 无损迁移指南 Typecho 迁移 Halo 完整教程:数据库视图解决表前缀 + 自动提取封面图 + 去重检测 我的 CodeBuddy 装备库:218个技能全公开 + 使用心得 为博客添加自定义评论表情 Comment2Bark:Typecho评论推送到Bark插件 又拍云插件 UpyunFile v1.2 更新:修复 Typecho 1.3.0 兼容性问题 手把手修复RSS 403:从PHP警告到Cloudflare拦截的全链路排查 网站被镜像怎么办?2026年反镜像攻防实战指南 VLESS + Reality + Vision:2026 极致隐蔽节点搭建全解析 给OpenList和Alist加上液态玻璃效果,颜值直接拉满! 网页截图瞬间“赛博飞升”?手把手教你根治 Windows HDR 截图发白 群晖 NAS 影音终极方案:Docker Rclone + OpenList 完美挂载 Plex 全攻略 一个简洁高效的SVG图标库 告别重复劳动!一键填充评论的神奇书签脚本 - 蛋蛋之家 解锁思源笔记的隐藏力量:siyuan-patch 深度体验与技术实现 Oracle Cloud 自救指南:旧手机丢失后如何绕过 MFA 重新登录【更新2026年最新政策】 本站已加入“萌国ICP备案”联萌!😄 Excel 月报自动化指南:告别重复劳动,让数据主动为你服务 梦呓:为异地女友准备的2周年惊喜礼物 甲骨文云硬盘扩容指南:从50G到200G的“免费午餐”怎么吃? ⏰ 时间同步:当你的服务器开始“穿越”时,如何优雅地把它拉回现实 Typecho 又拍云文件管理插件修改版使用指南:新增自定义目录结构功能
Typecho 多吉云插件优化:更灵活的存储目录配置
吴蛋蛋 · 2026-01-22 · via 蛋蛋之家

基于两双筷子原版插件优化,在保持稳定性的基础上增加存储路径自定义功能

之前有过一篇又拍云的,大家可以去看看:

📦 核心改进:存储路径的自定义化

1. 从预设模式到动态配置

原版插件提供了两种固定路径格式,但在实际使用中,站长们有更多样化的存储需求:

  • 统一管理多个网站资源:一个多吉云账号管理多个网站
  • 符合现有CDN配置规则:适应已有的CDN缓存策略
  • 保持与旧系统的路径兼容:从其他平台迁移时保持路径结构
  • 按内容类型分类存储:图片、文档、视频分开存放

优化后

  • ✅ 完全可配置的存储根目录
  • ✅ 支持任意自定义路径结构
  • ✅ 自动兼容原有配置模式
  • ✅ 提供平滑的迁移路径
  • ✅ 智能路径格式化处理

2. 🌟 实际应用场景

🏠 个人博客    → 使用 /uploads 简洁明了
🏢 企业网站   → 使用 /static 分类清晰
🔧 多站点管理 → 使用 /site1/uploads /site2/uploads 隔离管理
🔄 迁移用户   → 使用 /typecho/uploads 保持原路径
📊 内容平台   → 使用 /images /videos /docs 按类型分类

🔧 技术实现亮点

1. 可配置的存储目录

// 🎯 原版:固定两种模式(二选一)
if ($pluginConfig['path_style'] == 'typecho') {
    $uploadPath = self::getUploadDir().$uploadPath;
}
// 只能选择:Typecho风格 或 极简风格

// ✨ 新版:动态配置(自由定义)
$customDir = $pluginConfig['custom_dir'] ?? '/files';
$uploadPath = $customDir . '/' . $date->year . '/' . $date->month . '/' . $date->day;
// 可以填写:/uploads、/static、/typecho/uploads 等任意路径

2. 严格的输入验证

public static function configCheck($settings) {
    // 🔒 必填项检查
    if (empty($settings['custom_dir'])) {
        throw new Exception('存储目录不能为空');
    }
  
    // 📝 格式验证
    if (!str_starts_with($settings['custom_dir'], '/')) {
        throw new Exception('存储目录必须以斜杠(/)开头');
    }
  
    // 🛡️ 安全字符检查
    if (preg_match('/[<>:"|?*]/', $settings['custom_dir'])) {
        throw new Exception('存储目录包含非法字符');
    }
  
    // 📊 路径深度限制(防止过深路径)
    $depth = substr_count($settings['custom_dir'], '/') - 1;
    if ($depth > 5) {
        throw new Exception('存储目录层级过深,建议不超过5级');
    }
}

3. 📋 配置示例

# 配置:/uploads
# 实际路径:/uploads/2026/01/22/filename.jpg
# 适合:个人博客、简单站点

# 配置:/typecho/uploads  
# 实际路径:/typecho/uploads/2026/01/22/filename.jpg
# 适合:从原版升级、保持路径一致

# 配置:/static/images
# 实际路径:/static/images/2026/01/22/filename.jpg
# 适合:企业网站、资源分类

# 配置:/site/blog/uploads
# 实际路径:/site/blog/uploads/2026/01/22/filename.jpg
# 适合:多站点、子站点管理

# 配置:/
# 实际路径:/2026/01/22/filename.jpg
# 适合:极简主义、根目录存储

📂 存储路径命名指南

1. 推荐命名方案

📁 个人博客推荐:/uploads
📁 企业网站推荐:/static
📁 多站点推荐:/site/[id]/uploads
📁 Typecho老用户:/typecho/uploads
📁 资源分类推荐:/images、/docs、/videos
📁 日期优先推荐:/2026/uploads

2. ✅ 命名最佳实践

  1. 使用小写字母:避免大小写敏感问题(Linux/Windows差异)
  2. 使用连字符而非下划线/my-files/my_files更友好
  3. 保持简洁:建议不超过3级深度,便于管理
  4. 语义明确:路径名能反映内容类型,便于识别
  5. 避免保留字:不要使用系统保留目录名
  6. 英文优先:中文路径可能在某些系统上有兼容性问题

3. ❌ 避免这样写

/files/uploads           # 重复了"uploads",冗余
/my uploads             # 包含空格,可能引发问题
/uploads/               # 末尾不要加斜杠
/../../etc              # 危险路径,安全风险
/CONFIG                 # 全大写,不美观
/2026-01-22/files       # 包含特殊字符

🔄 从原版升级

1. 配置对应关系

如果你正在使用原版插件,升级时只需对应填写:

原版选项 新版填写值 说明
Typecho风格 /typecho/uploads 保持原路径不变
极简风格 / 根目录存储

2. 📋 升级步骤

# 第一步:备份
1. 备份当前插件配置(截图或记录)
2. 备份重要上传文件(以防万一)

# 第二步:安装新版
1. 下载新版插件文件
2. 上传到 /usr/plugins/DogeUpload/
3. 覆盖原有文件(保留配置)

# 第三步:修改配置
1. 进入Typecho后台 → 插件管理
2. 找到DogeUpload插件,点击"设置"
3. 根据原配置填写"存储目录"
   - 原Typecho风格 → 填写:/typecho/uploads
   - 原极简风格 → 填写:/
4. 其他配置保持不变
5. 点击"保存"

# 第四步:验证测试
1. 上传一个测试文件
2. 检查文件是否出现在正确路径
3. 查看文章中图片显示是否正常

⚠️ 重要提醒

  1. 已上传文件不受影响:修改存储目录仅对新上传文件生效,已存在的文件保持原路径
  2. 手动迁移需要:如需统一所有文件路径,需要手动迁移并更新数据库引用
  3. CDN配置同步:如果使用CDN,确保CDN回源配置支持新路径
  4. 测试环境先行:建议在测试环境验证无误后再应用到生产环境
  5. 路径一旦确定:尽量避免频繁修改,以免造成路径混乱

❓ 常见问题

Q:改了存储目录,旧文章的图片会失效吗?

A:不会失效。插件会保持旧图片的原始路径,只有新上传的图片使用新路径。

Q:可以随时修改存储目录吗?

A:技术上可以,但建议在访问量低时修改,修改后立即测试上传功能。

Q:填写的路径在存储桶中不存在怎么办?

A:插件会自动创建所需的目录结构,无需手动在多吉云创建。

Q:支持中文目录名吗?

A:技术上支持,但强烈建议使用英文路径,兼容性更好,不易出问题。

Q:如何查看当前文件的实际存储路径?

A:上传文件后,可以在 Typecho 后台的 "附件管理" 中查看文件路径。

Q:修改后上传失败怎么办?

A:检查:① 路径是否以/开头;② 是否包含非法字符;③ 多吉云 API 配置是否正确。

Q:可以设置多级目录吗?比如 /year/month/category/****?

A:目前插件自动添加年月日三级,你可以在配置中设置基础目录,如 /blog/images,最终路径会是 /blog/images/2026/01/22/

🎯 总结

这次优化虽然改动不大,但解决了一个很实际的问题:让存储结构适应你的需求,而不是让你去适应固定的结构

优化带来的好处:

  • 对新手友好:默认/files开箱即用,无需复杂配置
  • 对老用户兼容:支持原版配置无缝迁移,零学习成本
  • 对专业用户灵活:完全自定义存储层级,适应各种架构
  • 对未来可扩展:为更多存储策略和功能扩展打下基础

设计理念:

  1. 简洁至上:一个配置项解决路径问题
  2. 稳定优先:不影响已有功能,不破坏现有数据
  3. 智能辅助:自动格式化路径,减少配置错误
  4. 开放灵活:不限制用户的使用方式

优化虽小,但实用性强。这个改进来源于实际使用中的需求,希望能让大家的 Typecho 多吉云存储体验更加顺畅、灵活!


插件信息

  • 基于版本:两双筷子原版 DogeUpload
  • 优化重点:存储路径自定义
  • 兼容性:完全兼容原版配置和数据
  • 适用场景:所有使用多吉云存储的Typecho用户

如果你在使用中遇到任何问题,或者有改进建议,欢迎交流讨论。希望这个优化能帮助到更多 Typecho 站长! 🚀