如何将图片保存到阿里云OSS(下)

php 3211      收藏
如何节省服务器的空间资源,即如何解决图片占用过多空间问题,通过阿里云对象存储OSS服务,可以在上传图片的时候,将图片的上传地址改为阿里云上,从而减少对服务器空间的占用,本文主要介绍的是如何将图片保存到阿里云中,即图片保存到阿里云的具体实现方法。

如何节省服务器的空间资源,即如何解决图片占用过多空间问题,通过阿里云对象存储OSS服务,可以在上传图片的时候,将图片的上传地址改为阿里云上,从而减少对服务器空间的占用,本文主要介绍的是如何将图片保存到阿里云中,即图片保存到阿里云的具体实现方法。

之前的文章已经讲到了如何从阿里云的后台管理中心获取到OSS的配置参数。

本文介绍的是使用thinkphp实现的,所以会将配置参数配置到config.php中。

阿里云OSS使用步骤:

首先,是将阿里云的SDK安装包配置到thinkphp的第三方插件库中:

配置的路径将阿里云的sdk安装包放在ThinkPHP\Extend\Vendor\文件夹下,如图:

自学php博客

其次,配置参数:

配置代码如下:

自学php博客

//定义阿里云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函数文件,然后在文件中,定义阿里云实例化方法、图片上传方法以及获取图片在阿里云保存路径方法。方法如下:

自学php博客

自学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自定义的上传方法,在此不再赘述,所以介绍的方法是在直接使用上传图片到服务器的基础上进行的。

自学php博客

上图中,$this->upload();是调动的自定的上传图片方法,该方法会将图片保存到服务器中。

$data['pic_url']中保存的是图片在服务器中的保存路径,将该路径传递给图片上传阿里云方法,既可以将图片上传到阿里云中,文件在路径不变,上传之后,我们只需要将上传之前的图片路径传递给获取阿里云路径方法get_url()方法,即可获取该图片被保存到阿里云中的路径,将此路径保存到数据库中,在前台显示的时候,只需要将此路径赋给前台的img的src即可完成显示。

将图片保存到阿里云及获取图片路径的完整过程就是这些,具体有些细节不懂的,欢迎咨询。

阿里云SDK下载地址:http://pan.baidu.com/s/1jHTET3S

密码:sf4w