事情还得从元旦那回说起。话说2017年最后一天启用CDN内容分发服务后,网站也就更新了几篇文章而已,昨天按计划开更内容,写了一半准备插图的时候,就爆了。硬生生的不让我插入图片啊,俗话说字不如表,表不如图。一张图能解决很多文字才能表达清楚的意思,并且简单直白粗暴。
点击单图上传按钮,选择需要的图片以后,编辑器中就一直是一个loading的状态,文章中无法插入需要的图片了。尝试使用多图上传功能,点开后就出现了错误信息:后端配置项没有正常加载,上传插件不能正常使用!如图:
初步排查了下错误原因,我看了下本地程序,一起正常,前面是点击单图上传出现loading状态的,这个有两种可能图片上传了,拉取不到,二是图片没有成功上传。FTP看了下服务器上的文件,很显然,图片并没有被上传。
回想了下,之前发布文章的时候功能一直正常,最近更新系统也都没有牵扯到文章系统的改造,而UEditor是个集成环境,没有做二次开发,只在使用的时候自定义了一些配置,并且配置当时调试正常,最近也没有变更配置。
那么最大的可能就是在我启用CDN之后出现的故障了,原因前面也提到启用CDN以后一直没有更新带图的博文。在没有确定是否是CDN造成的准确判断之下,我尝试断开了CDN,直接解析了域名,待生效后登录后台,发现插图功能恢复,最终验证了猜测。
既然是CDN造成的,无非就是因为回源的问题。之前做过将博客的后台系统全部回源了,而UEditor只出现在后台上,并没有出现在前台。我就在想,也许是因为我把UEditor作为插件使用的,而我在静态资源路径配置方面,和后台视图路径并非一致。接下来我就把UEditor的路径在阿里云CDN里面回源了,刷新后CDN缓存后再次尝试添加图片依然无效(这之前把域名解析切回到了CDN上)。然后又接着将UEditor的配置文件ueditor.config.js
和config.json
等需要加载的做了文件回源。做完这一切之后,后台依然没有鸟我,还是报错。
联想到之前QQ互联的坑,加上编辑器其它功能都完好,唯独上传功能异常,果断判断问题应该出现在参数被过滤的原因上。
通过阅读UEditor的PHP版上传原代码,绕了个小弯,先去看了Uploader.class.php
这个文件,这个上传类要先读取配置项目$config
,果断将$config加到阿里云CDN的过滤参数中,再次尝试,依然没有解决。然后就去看了下ueditor.config.js
文件,在顶部看到这样一句:服务器统一请求接口路径。serverUrl: URL + "php/controller.php"
。如获至宝,迅速点开controller.php
文件,看到$action = $_GET['action'];
,并且下面通过switch
来判断数据内容的,也就是说这个$action
才是被统一调用各种参数的公共名称。所以最后将action
写到CDN的过滤参数中(实则是过滤参数保留),问题解决。