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

推荐订阅源

博客园 - 三生石上(FineUI控件)
O
OpenAI News
WordPress大学
WordPress大学
P
Proofpoint News Feed
J
Java Code Geeks
G
Google Developers Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
The Register - Security
The Register - Security
Engineering at Meta
Engineering at Meta
H
Help Net Security
人人都是产品经理
人人都是产品经理
Vercel News
Vercel News
N
Netflix TechBlog - Medium
F
Full Disclosure
U
Unit 42
Latest news
Latest news
N
News and Events Feed by Topic
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
I
InfoQ
L
LINUX DO - 最新话题
T
Threat Research - Cisco Blogs
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
爱范儿
爱范儿
K
Kaspersky official blog
Google Online Security Blog
Google Online Security Blog
小众软件
小众软件
I
Intezer
V
V2EX
S
SegmentFault 最新的问题
C
CERT Recently Published Vulnerability Notes
阮一峰的网络日志
阮一峰的网络日志
Security Archives - TechRepublic
Security Archives - TechRepublic
Recent Announcements
Recent Announcements
C
Check Point Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
Recorded Future
Recorded Future
博客园 - Franky
Project Zero
Project Zero
S
Securelist
Attack and Defense Labs
Attack and Defense Labs
Spread Privacy
Spread Privacy
The Hacker News
The Hacker News
T
The Blog of Author Tim Ferriss
Google DeepMind News
Google DeepMind News
aimingoo的专栏
aimingoo的专栏
博客园 - 叶小钗
NISL@THU
NISL@THU
云风的 BLOG
云风的 BLOG
S
Secure Thoughts
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed

蛋蛋之家

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插件 手把手修复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周年惊喜礼物 Typecho 多吉云插件优化:更灵活的存储目录配置 甲骨文云硬盘扩容指南:从50G到200G的“免费午餐”怎么吃? ⏰ 时间同步:当你的服务器开始“穿越”时,如何优雅地把它拉回现实 Typecho 又拍云文件管理插件修改版使用指南:新增自定义目录结构功能 华为鸿蒙6.0回退4.2记录 最近小公主情绪不佳 劳动节的家乡景色 烟台山公园一游 群晖搭建ChatGPT Web 推荐脚本:ChatGPT - 提示选择器 Activation Method for JetBrains Products (English version) JetBrains 系列产品激活方法 疫情三年后再进校园 修复searchEngineJump在谷歌搜索页面不生效问题 事情既然发生了,可以是遗憾,不要去后悔。 侄女的试唱会比赛 新一代图片编码格式测试 省科技馆之行 Typora Windows版破解补丁及主题推荐 在Typora中使用PicList上传图片 域名ICP备案之变更网站 Ubuntu 系统如何使用 root 用户登录 中国联通——让一切自由连不通 如何选购适合的口罩? 今天移动营业厅遇到一个小姐姐,真的好美 它不乐意 如何解决Typecho文章不是Markdown语法创建问题 探手抓住这一天的尾巴,为自己庆生 收到腾讯云自媒体分享计划2月份礼品 尝试百度Spider抓取异常问题 甲骨文DD重装系统及失联救砖教程 终于MrDoc升级v0.8.7成功了 Windows 端口查询及杀死进程 甲骨文实例开通与X-UI安装 国艺花鸟市场的悠闲 在思源笔记中使用群晖Synology C2对象存储服务 MrDoc升级v0.8.7失败 居居的手工作品 Linux系统时间同步命令小结 AList安装指南 宝塔面板降级 v7.7.0 及解除强制绑定手机、免费安装专业版插件的方法 修复群晖Synology Drive client右键菜单缺失问题 Windows11 展开折叠的右键菜单为传统模式 在 Windows 下批量将 Markdown 文档转为 Word 文档 Typecho的一些修改记录 Markdown语法——Mermaid 有两种新方案—CloudFlare官方免费CNAME接入教程 居居的新冠历程 群辉安装Transmission套件、增强汉化WebUI并备份做种列表 群晖 docker 部署思源笔记 Office for Mac 2019 License Installer 公众号通过api发送小程序消息 Windows 10下 iTunes 备份默认存储路径修改 Excel查找返回多个值,并将返回的值放在同一个单元格里面 七牛云测试域名失效后如何下载空间中的文件 入手三星860 evo 500g SSD固态硬盘 分享一套耐看的鼠标指针 如何重置OmniFocus数据库 Office for Mac 2016 License Installer Mac下配置终端+iTerm 2主题 如何制作苹果系统安装U盘 LNMP部署typecho,开启SSL、强制开启https Stylish样式如何设置为特定网址不生效? Typecho插件错误号:42S01的解决方法 电动车被偷了 热火 R150 上手开箱 UltraMon 3.3.0 汉化+注册机 如何用 MWeb 发布 Typecho 文章 测试 Mweb 发布到印象笔记功能 忘记了iPhone访问限制的密码该怎么办? 新玩具KAREE电子烟,先试试 Mac mini 2011 开启Handoff方法 见微知著 浅谈手游创新 PhoneClean Pro授权注册激活码
又拍云插件 UpyunFile v1.2 更新:修复 Typecho 1.3.0 兼容性问题
吴蛋蛋 · 2026-04-03 · via 蛋蛋之家

又拍云又拍云插件 UpyunFile 更新

前言

距离上次发布 v1.1 版本已经过去了三个月,Typecho 官方也发布了备受期待的 1.3.0 版本。这次大版本更新带来了许多底层架构的改进,但也导致了不少插件出现兼容性问题。

Typecho 又拍云文件管理插件修改版使用指南:新增自定义目录结构功能

昨天我更新了新版本遇到的问题:升级 Typecho 1.3.0 后,又拍云插件在后台文件管理页面报错,无法正常显示已有文件的 URL。于是更新了 UpyunFile v1.2 版本,这个版本不仅彻底解决了 Typecho 1.3.0 的兼容性问题,还进一步简化了配置流程,让插件使用更加便捷。


1、核心修复:Typecho 1.3.0 兼容性适配

问题现象

升级 Typecho 1.3.0 后,你可能会遇到以下问题:

  • 后台文件管理页面报错:附件 URL 显示异常或页面报错
TypeError: UpyunFile_Plugin::attachmentHandle(): 
Argument #1 ($content) must be of type array, Typecho\Config given
...
  • 文章中的附件链接失效:图片、文件无法正常加载
https://cdn.example.com/  ← 路径缺失!

解决方案

v1.2 版本采用了多重兼容策略,确保在不同 Typecho 版本下都能正常工作:

public static function attachmentHandle(Typecho\Config $content) {
    // 1. 优先检查新版本的 Config 对象结构
    if (isset($content->attachment) && isset($content->attachment->path)) {
        $path = $content->attachment->path;
    } 
    // 2. 其次检查直接 path 属性
    else if (isset($content->path)) {
        $path = $content->path;
    } 
    // 3. 最后尝试从 text 字段反序列化(兼容旧数据)
    else if (isset($content->text)) {
        $attachment = @unserialize($content->text);
        if (is_array($attachment) && isset($attachment['path'])) {
            $path = $attachment['path'];
        }
    }
    // 构建完整 URL
    return Typecho_Common::url($path, $domain);
}

2、资源泄漏修复

在代码审查中发现了一个潜在的资源管理问题:

修复前(存在资源泄漏风险):

$fh = fopen($uploadfile, 'rb');
$upyun->write($path, $fh);
// 如果 write() 抛出异常,fclose 不会执行
if (is_resource($fh)) {
    fclose($fh);
}

修复后(确保资源释放):

$fh = fopen($uploadfile, 'rb');
try {
    $upyun->write($path, $fh);
} finally {
    // 无论是否异常,都会执行
    if (is_resource($fh)) {
        fclose($fh);
    }
}

3、配置简化:移除目录结构选择

为什么要简化?

在 v1.1 版本中,我提供了三种目录结构模式:

  1. 自定义结构 - /files/年/月/文件名
  2. Typecho结构 - /typecho/usr/uploads/年/月/文件名
  3. 精简结构 - /年/月/文件名

但在实际使用中,我发现:

  • 90% 的用户只使用自定义结构
  • 三种模式增加了代码复杂度
  • 配置界面不够直观

新的设计

v1.2 版本移除了目录结构模式选择,只保留一个自定义路径输入框:

自定义路径:/files  (默认为 /files)

最终文件路径格式固定为:

{自定义路径}/{年}/{月}/{文件名}
例如:/files/2026/04/example.jpg

好处

  • 🎨 界面更简洁 - 减少用户选择负担
  • 🔧 配置更简单 - 只需填写一个路径
  • 🚀 代码更精简 - 减少潜在 bug
  • 📚 逻辑更清晰 - 统一的行为预期

📋 版本更新记录

v1.2 (2026-04-02)

🐛 修复

  • 修复 Typecho 1.3.0 兼容性问题
  • 修复后台文件管理 URL 不完整问题
  • 修复文件句柄资源泄漏风险

✨ 优化

  • 简化目录结构配置,移除模式选择
  • 自定义路径默认值改为 /files
  • 完善代码注释,提升可维护性

v1.1 (2026-01-09)

  • ✅ 新增自定义目录结构功能
  • ✅ 优化后台配置界面用户体验

🚀 安装与使用指南

系统要求

  • Typecho 1.1+ 版本(推荐 1.3.0+)
  • PHP 7.0+ 运行环境
  • 有效的又拍云服务账号

升级步骤(从 v1.1 升级)

  1. 备份数据 - 建议先备份数据库和现有插件配置
  2. 下载新版本 - 获取 v1.2 版本插件包
  3. 替换文件 - 覆盖原有插件文件(保留配置)
  4. 检查配置 - 进入插件设置,确认自定义路径正确
  5. 测试验证 - 上传测试文件,检查 URL 生成是否正常

或者你直接获取 GitHub 上 Plugin.php 的代码覆盖一下呗,😂

全新安装步骤

  1. 下载插件压缩包

  2. 解压至 Typecho 的 usr/plugins 目录,文件夹命名为 UpyunFile

  3. 在 Typecho 后台「控制台」->「插件」中启用插件

  4. 进入插件设置页面,配置以下参数:

    • 绑定域名 - 又拍云服务绑定的域名(如 https://cdn.example.com
    • 自定义路径 - 文件上传路径(默认为 /files
    • 服务名称 - 又拍云服务名称
    • 操作员 - 又拍云操作员账号
    • 密码 - 又拍云操作员密码
  5. 保存设置,完成安装


⚙️ 配置详解

基本配置

配置项说明示例
图片链接修改开启后将文章中的图片链接替换为 CDN 链接建议开启
绑定域名又拍云服务绑定的域名https://cdn.example.com
自定义路径文件上传的基础路径/files
服务名称又拍云服务名称mybucket
操作员又拍云操作员账号operator
密码又拍云操作员密码password

高级配置(可选)

又拍云图片处理

需要在又拍云控制台创建缩略图版本,然后将版本名称填入插件配置。

  • 缩略图版本名称 - 如 thumbsmall
  • 转码输出格式 - 如 jpgpngwebp

⚠️ 注意:带有 _nothumb 后缀的图片不会被处理(如 example_nothumb.png

Token 防盗链

  1. 在又拍云控制台启用 Token 防盗链功能
  2. 将密钥填入插件配置
  3. 设置签名过期时间(单位:秒)

📥 下载与反馈

项目地址

  • GitHub Releases:https://github.com/NoEggEgg/UpyunFile

问题反馈

如果您在使用过程中遇到任何问题,欢迎通过以下方式反馈:

  • 在 GitHub 提交 Issue
  • 在本文评论区留言

参与贡献

欢迎提交 Pull Request 或提出改进建议!


🙏 致谢

  • 原版插件:https://github.com/codesee/UpyunFile
  • 二改版本:https://github.com/ShadowySpirits/UpyunFile
  • 三改版本:https://github.com/liuran001/UpyunFile
  • Typecho 官方:https://typecho.org
  • 又拍云官方:https://www.upyun.com