使用对象存储加速网站访问

起因:国内主机的带宽实在是太贵了,买不起。。。被迫在项目上线之前就启用图片cdn。走了大概一周的弯路,发现其实用起来远比想象中来的简单。

程序端的思路:

考虑到以最小的代价改动原有程序,并能够提供一个开关来方便切换cdn服务商或者关闭cdn服务,故不考虑修改数据库中现有数据。
原有的图片以相对路径存储在数据库中(形如”images/1.jpg” “upload/20160815/100000.jpg”),输出时只要在记录前拼接cdn地址即可;
项目中使用了ueditor富文本编辑器(稍作修改使上传目录为/upload文件夹下),观察发现其图片url均为”./upload“开头,故替换”./“为cdn地址;
当不再使用cdn服务时,将cdn地址写成服务器主域名即可完成禁用。

由于这类对象存储服务都提供了无缝迁移功能(腾讯云中称之为”回源设置“,七牛中称为”镜像源“),即对象存储服务器中若不存在当前文件,则自动从用户设定的源地址获取,使得无需手动处理上传逻辑。

参考代码:(原始代码在公司,以下代码为在家写博客时凭回忆手写,并未调试,可能存在某些小错误;以说明思路为主)

class Zcdn
{
$cdn_host = '';
public function __construct()
{
//可以从配置文件中读取或手动修改此处配置;将此处修改为主域名以达到不使用cdn服务的目的
$this->cdn_host = 'http://your.cdn.host'; 
}
public static function auto($url, $type='normal')
{
if($type == 'normal'){
return (new Zcdn())->cdn_host.$url;
}elseif($type == 'ue'){
return str_replace("./", (new Zcdn())->cdn_host, $url);
}
}
}

调用:

//图片或者其他静态资源
Zcdn::auto($item['url_from_db']);
//使用ueditor富文本编辑器时保存在数据库中的记录
Zcdn::auto($item['ue_text_from_db'],'ue');

发表评论

电子邮件地址不会被公开。 必填项已用*标注