阿里云OSS上傳服務的搭建

很多項目經(jīng)常會用到阿里云的OSS抵赢,每次都需要集成一遍oss的sdk。

那么有沒有一勞永逸的方法呢。答案當然是yes尔破!

我們可以將oss上傳做成一個可以對外提供的服務,以后再需要使用的時候就直接調(diào)用就好了浇衬。

本服務采用RESTFull接口設計懒构。

提供兩個方法:upload,urlsign

upload為統(tǒng)一上傳接口耘擂,通過這個接口可以上傳任意文件到OSS胆剧。

urlsign為url簽名接口,通過這個接口可以拿到私有bucket的簽名地址醉冤。

下面直接來看代碼

/** 
  * 驗證來源ID 
  */
private function checkSource() {
    if (empty($GLOBALS['sources']) || empty($this->_sourceid)) {        
        Output::jsonStr(Error::ERROR_AUTH_SOURCE_FAIL);
    }
    foreach($GLOBALS['sources'] as $key => $value) {
        if ($value['sourceid'] == $this->_sourceid) {
            $this->_bucket = $value['bucket'];
            $this->_domain = $value['domain'];
            $this->_project = $key;
        }
    }
    if (empty($this->_bucket)) {
        Output::jsonStr(Error::ERROR_AUTH_SOURCE_FAIL);
    }
}

這樣可能看不懂秩霍,再來看下配置


配置

這回是不是理解了呢。
通過這段代碼可以實現(xiàn)在配置里指定單獨的Bucket和綁定的域名蚁阳。

但是铃绒,實際情況是如果綁定的域名是CDN域名,那么就無法操作oss了螺捐,那么有什么解決辦法呢颠悬。

答案就是:所有的上傳操作都走oss的內(nèi)網(wǎng)域名,上傳成功之后返回的地址走綁定域名归粉。

代碼如下:

/**
 * 初始化ossClient
 * @param type $useDomain
 * @return OssClient
 */
public function ossClient($useDomain = 0) {
    $endpoint = self::endPoint;
    $isCName = 0;
    if($useDomain && $this->_domain){
        $endpoint = $this->_domain;
        $isCName = 1;
    }
    try {
        return new OssClient(self::accessKeyId, self::accessKeySecret, $endpoint,  $isCName);
    } catch (OssException $e) {
        Output::jsonStr(Error::ERROR_SYSTEM_FAIL, $e->getMessage());
    }
}

因為同一個方法中不一定使用綁定的域名還是原始域名椿疗,所以這里封裝了一個方法,目的就是可以指定使用綁定的域名或者不使用糠悼。

下面就是具體的接口代碼

/**
 * 統(tǒng)一上傳服務
 * @param type $file_content
 * @param type $save_name
 * @param type $save_path
 */
public function _upload($file_content, $save_name, $save_path) {
     //獲取文件類型
    $type = Tools::getFileType($file_content);
    if(!$type){
        Output::jsonStr(Error::ERROR_PARAM_INVALID, 'unknow type.');
    }
    //獲取目標文件名
    $filename = $this->_getSaveName($save_name, $type);
    $object = ($save_path) ? "$this->_project/$save_path/$filename" : "$this->_project/$filename";
    try {
        $this->ossClient()->putObject($this->_bucket, $object, $file_content);
    } catch (Exception $exc) {
        Output::jsonStr(Error::ERROR_SYSTEM_FAIL, $exc->getMessage());
    }
    $data = ['object' => $object, 'url' => $this->_getUrl($object)];
    $img_info = OssPictureModel::info($this->url);
    Output::jsonStr(Error::SUCCESS, $img_info ? array_merge($data, $img_info) : $data);
}

/**
 * API:獲取私有Bucket中Object的signUrl
 */
public function urlSignAction() {
    $object = $this->input_post_param('object');
    $timeout = $this->input_post_param('timeout', 60);
    if(!$object){
        Output::jsonStr(Error::ERROR_PARAM_MISS);
    }
    try {
        $this->ossClient()->doesObjectExist($this->_bucket, $object);
    } catch (Exception $exc) {
        Output::jsonStr(Error::ERROR_PARAM_INVALID, $exc->getMessage());
    }
    try {
        $sign_url = $this->ossClient(1)->signUrl($this->_bucket, $object, $timeout);
    } catch (Exception $exc) {
        Output::jsonStr(Error::ERROR_PARAM_INVALID, $exc->getMessage());
    }
    Output::jsonStr(Error::SUCCESS, $sign_url);}

到這里届榄,我們就搭建好了一個基本的服務,以后有需要用到oss上傳的項目倔喂,只要在本服務配置文件的sources數(shù)組中新增一個成員铝条,然后就可以通過接口直接調(diào)用了。

我是閆大伯席噩,一只永不停歇的野生程序猿

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末班缰,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子悼枢,更是在濱河造成了極大的恐慌埠忘,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異莹妒,居然都是意外死亡名船,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門旨怠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來渠驼,“玉大人,你說我怎么就攤上這事鉴腻∶陨龋” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵爽哎,是天一觀的道長蜓席。 經(jīng)常有香客問我,道長倦青,這世上最難降的妖魔是什么瓮床? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮产镐,結(jié)果婚禮上隘庄,老公的妹妹穿的比我還像新娘。我一直安慰自己癣亚,他們只是感情好丑掺,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著述雾,像睡著了一般街州。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上玻孟,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天唆缴,我揣著相機與錄音,去河邊找鬼黍翎。 笑死面徽,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的匣掸。 我是一名探鬼主播趟紊,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼碰酝!你這毒婦竟也來了霎匈?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤送爸,失蹤者是張志新(化名)和其女友劉穎铛嘱,沒想到半個月后暖释,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡弄痹,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年饭入,在試婚紗的時候發(fā)現(xiàn)自己被綠了嵌器。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肛真。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖爽航,靈堂內(nèi)的尸體忽然破棺而出蚓让,到底是詐尸還是另有隱情,我是刑警寧澤讥珍,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布历极,位于F島的核電站,受9級特大地震影響衷佃,放射性物質(zhì)發(fā)生泄漏趟卸。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一氏义、第九天 我趴在偏房一處隱蔽的房頂上張望锄列。 院中可真熱鬧,春花似錦惯悠、人聲如沸邻邮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽筒严。三九已至,卻和暖如春情萤,著一層夾襖步出監(jiān)牢的瞬間鸭蛙,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工筋岛, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留娶视,地道東北人。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓泉蝌,卻偏偏與公主長得像歇万,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子勋陪,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理贪磺,服務發(fā)現(xiàn),斷路器诅愚,智...
    卡卡羅2017閱讀 134,601評論 18 139
  • 阿里云對象存儲OSS,主要是用于存儲靜態(tài)資源文件,它提供了很多方便的操作圖片的方法(縮放旋轉(zhuǎn)水印等),在實現(xiàn)了OS...
    記住你姓李閱讀 10,403評論 0 9
  • OSS: Object Storage Service 初次接觸之控制臺操作 操作教程地址 開通40g/年 9塊錢...
    __damon__閱讀 7,572評論 0 7
  • 傳統(tǒng)情況下寒锚,網(wǎng)站源碼以及數(shù)據(jù)庫劫映、圖片等資源都是存儲在一個服務器上的。這樣的配置會存在這樣的尷尬問題:當網(wǎng)站數(shù)據(jù)越來...
    程序猿i閱讀 4,927評論 0 1
  • 公司讓我使用阿里云OSS服務器刹前,上傳其實很快就搞定了泳赋,但是一直搞不懂我上傳上去的文件如何下載,翻閱了好多好多資料和...
    勿忘心安0521閱讀 1,895評論 0 1