Tominysun

前言

本站早些时候一直使用又拍云文件管理插件托管Typecho上传的附件,2021年左右备案信息出了一些问题,导致又拍云使用困难。
近期我解决了上述问题并重新开始撰写博文,此时就需要插件便利化我的操作。
但二改插件作者的仓库目前已经Archived了,不再更新,网站程序升级到Typecho v1.2.0版本,插件貌似不能用了。
本来我打算自己重新造轮子的,但一直拖了下来。(期间甚至使用UPX手动同步文件到又拍云)
所幸,Github社区中有人fork了二改仓库,使其支持Typecho v1.2.0版本。

魔改

但是现有的插件依然不能满足我的使用需求。
我花了些时间,在三改仓库的基础上再次fork,增添了我想要的两个功能。

  1. 自定义上传目录
  2. 上传同时保存本地副本

尽管自定义上传目录的功能原插件也能通过在config.inc.php中添加如下代码解决。

/* 修改上传附件目录 适配Upyun插件 */
define('__TYPECHO_UPLOAD_DIR__', '/usr/uploads');

但毕竟这种方式在我看来不够优雅,也不利于用户理解,或许集成在插件设置页面会更好?
因此我的四改插件在保留上述变量的情况下,添加了自定义上传目录的功能。
目前本插件中,上传目录的自定义优先级是:

__TYPECHO_UPLOAD_DIR__ > 插件内自定义上传目录 > 默认目录形式

第二个功能,保存本地副本的实现,则是参考了Typecho/var/Widget/Upload.php原函数中的实现方法,修改了部分二改插件的private函数为public,再加上一个新函数而最终完成。

在调试的过程中,我还发现在上传和修改函数中@fclose()是会提示错误的。
但由于@运算符抑制了错误提示,只有在调试模式下才会出现错误。
我在更新中把这部分语句注释掉了,推测应该是又拍云的SDK上传完成后自动关闭了Stream,所以重复执行fclose()就有问题了。

挖坑

emm,其实整个插件目前基本上很完善了,但据我调试中发现,图片链接软替换和获取文件绝对路径的函数可能还是存在一定的问题,导致Token防盗链功能在文章中工作异常。
当然也可能是我的主题魔改了文章列表的输出方式,导致替换失败?

还有一点,我理想的形式应该是文章中保存形如https://{Site_URL}/usr/uploads/xxx这样的原始链接,在文章输出的时候进行替换,变成https://static.example.com/usr/uploads/xxx这样的链接。而不是在数据库里的文章就保存成替换后的链接,这样会导致启用插件前后的附件链接不一致,后续可能需要去数据库中“Hack”才能替换好所有的附件链接。

这个有点强迫症的想法目前我通过设置插件和在我的魔改主题里进行替换已经实现了,但理想的状态还是插件中拥有上述功能。

这就作为一个小坑暂且挖在这里,日后有机会或许回来填坑??

链接

tominysun/UpyunFile GitHub GitHub tag (latest by date) GitHub release (latest by date)

添加新评论