頂部導航開始 -->

如何將圖片保存到阿里云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

自學php博客
請先登陸后發表評論
  • 最新評論
  • 總共0條評論
  • ? 2014-2016 zixuephp.cn 版權所有
  • ICP證:皖ICP備16012107號
  • 聯系郵箱:[email protected]
  • 交流請加微信:weibobf2899 或掃下方二維碼
双大床红利扑克1手APP