如何节省服务器的空间资源,即如何解决图片占用过多空间问题,通过阿里云对象存储OSS服务,可以在上传图片的时候,将图片的上传地址改为阿里云上,从而减少对服务器空间的占用,本文主要介绍的是如何将图片保存到阿里云中,即图片保存到阿里云的具体实现方法。
之前的文章已经讲到了如何从阿里云的后台管理中心获取到OSS的配置参数。
本文介绍的是使用thinkphp实现的,所以会将配置参数配置到config.php中。
阿里云OSS使用步骤:
首先,是将阿里云的SDK安装包配置到thinkphp的第三方插件库中:
配置的路径将阿里云的sdk安装包放在ThinkPHP\Extend\Vendor\文件夹下,如图:
其次,配置参数:
配置代码如下:
//定义阿里云OSS常量 'ALIOSS_CONFIG' => array( 'KEY_ID' => 'xxxxxxxxxxx', // 阿里云oss key_id 'KEY_SECRET' => 'xxxxxxxxxxxxxxxxxx', // 阿里云oss key_secret 'END_POINT' => 'xxxxxxxxxxxxxxxx/', // 阿里云oss endpoint 'BUCKET' => 'xxxxxxxxxxxxxxxx' // bucken 名称 ), 'OSS_PATH' => 'http://tonghe-oss.myhousing.cn/',//定义阿里云的访问结合路径 |
然后,配置完成阿里云OSS的参数之后,需要定义阿里云图片上传函数,在thinkphp中,全局通用的函数是在common文件夹中创建的,在thinkphp项目的common文件夹中,创建common.php函数文件,然后在文件中,定义阿里云实例化方法、图片上传方法以及获取图片在阿里云保存路径方法。方法如下:
定义的图片上传阿里云方法的代码如下:
/** * 实例化阿里云oos * @return object 实例化得到的对象 */ function new_oss(){ vendor('Alioss.autoload'); $config=C('ALIOSS_CONFIG'); $oss=new \OSS\OssClient($config['KEY_ID'],$config['KEY_SECRET'],$config['END_POINT']); return $oss; } /** * 上传文件到oss并删除本地文件 * @param string $path 文件路径 * @return bollear 是否上传 */ function oss_upload($path){ // 获取bucket名称 $bucket=C('ALIOSS_CONFIG.BUCKET'); // 先统一去除左侧的.或者/ 再添加./ $oss_path=ltrim($path,'./'); $path='./'.$oss_path; if (file_exists($path)) { // 实例化oss类 $oss=new_oss(); // 上传到oss $oss->uploadFile($bucket,$oss_path,$path); // 如需上传到oss后 自动删除本地的文件 则删除下面的注释 unlink($path); return true; } return false; } /** * 获取完整网络连接 * @param string $path 文件路径 * @return string http连接 */ function get_url($path){ // 如果是空;返回空 if (empty($path)) { return ''; } // 如果已经有http直接返回 if (strpos($path, 'http://')!==false) { return $path; } // 判断是否使用了oss $alioss=C('ALIOSS_CONFIG'); if (empty($alioss['KEY_ID'])) { return 'http://'.$_SERVER['HTTP_HOST'].$path; }else{ $path=ltrim($path,'.'); return 'http://'.$alioss['BUCKET'].'.'.$alioss['END_POINT'].$path; }
} |
本文介绍的方法,是在图片上传到服务器之后,又将图片上传到阿里云的,是因为在用阿里云之前,项目中已经有了图片在服务器,然后又新增的上传阿里云功能,所以多了一步上传到服务器的功能。配置及定义上传图片方法完成之后,可以在项目中使用定义的方法了:
上传到服务器的方法可以自定义,也可以直接使用thinkphp自定义的上传方法,在此不再赘述,所以介绍的方法是在直接使用上传图片到服务器的基础上进行的。
上图中,$this->upload();是调动的自定的上传图片方法,该方法会将图片保存到服务器中。
$data['pic_url']中保存的是图片在服务器中的保存路径,将该路径传递给图片上传阿里云方法,既可以将图片上传到阿里云中,文件在路径不变,上传之后,我们只需要将上传之前的图片路径传递给获取阿里云路径方法get_url()方法,即可获取该图片被保存到阿里云中的路径,将此路径保存到数据库中,在前台显示的时候,只需要将此路径赋给前台的img的src即可完成显示。
将图片保存到阿里云及获取图片路径的完整过程就是这些,具体有些细节不懂的,欢迎咨询。
阿里云SDK下载地址:http://pan.baidu.com/s/1jHTET3S
密码:sf4w
宠物免费领养小程序,欢迎来踩