在OneThink(ThinkPHP3.2.3)中整合阿里雲OSS的PHP-SDK2.0.4,實現Web端直傳,服務端簽名直傳並設置上傳回調的實現流程


在OneThink(ThinkPHP3.2.3)中整合阿里雲OSS的PHP-SDK2.0.4,實現本地文件上傳流程

1、SDK安裝

github地址:https://github.com/aliyun/aliyun-oss-php-sdk

2、復制aliyun-oss-php-sdk-master\src\OSS至passport.hmwis.com\ThinkPHP\Library\Vendor\OSS,如圖1、2

復制aliyun-oss-php-sdk-master\src\OSS至passport.hmwis.com\ThinkPHP\Library\Vendor\OSS

復制aliyun-oss-php-sdk-master\src\OSS至passport.hmwis.com\ThinkPHP\Library\Vendor\OSS

復制aliyun-oss-php-sdk-master\src\OSS至passport.hmwis.com\ThinkPHP\Library\Vendor\OSS

復制aliyun-oss-php-sdk-master\src\OSS至passport.hmwis.com\ThinkPHP\Library\Vendor\OSS

3、注冊新的命名空間OSS,編輯文件passport.hmwis.com\Application\Common\Conf\config.php,如圖3

‘AUTOLOAD_NAMESPACE’ => array(‘Addons’ => ONETHINK_ADDON_PATH, ‘OSS’ => VENDOR_PATH.’OSS’), //擴展模塊列表

注冊新的命名空間OSS

注冊新的命名空間OSS

4、實例化OSS下面的類庫時,如

new OSS\OssClient();

自動加載對應的類庫文件OssClient.class.php,因此需要重命名OSS目錄下的文件名,將OssClient.php重命名為OssClient.class.php,OSS目錄下所有文件皆如是處理,如圖4

重命名OSS目錄下的文件名,將OssClient.php重命名為OssClient.class.php,OSS目錄下所有文件皆如是處理

重命名OSS目錄下的文件名,將OssClient.php重命名為OssClient.class.php,OSS目錄下所有文件皆如是處理

5、編輯passport.hmwis.com\Application\Common\Conf\config.php,生產環境下的OSS數據中心訪問域名設置為內網,如圖5

/* OSS初始化設置 */
‘OSS’ => array(
‘ACCESS_KEY_ID’ => ”, //從OSS獲得的AccessKeyId
‘ACCESS_KEY_SECRET’ => ”, //從OSS獲得的AccessKeySecret
‘ENDPOINT’ => ‘oss-cn-hangzhou-internal.aliyuncs.com’, //您選定的OSS數據中心訪問域名,例如oss-cn-hangzhou.aliyuncs.com
),

生產環境下的OSS數據中心訪問域名設置為內網

生產環境下的OSS數據中心訪問域名設置為內網

6、編輯passport.hmwis.com\Application\Common\Conf\debug.php,開發環境下的OSS數據中心訪問域名設置為外網,如圖6

/* OSS初始化設置 */
‘OSS’ => array(
‘ACCESS_KEY_ID’ => ”, //從OSS獲得的AccessKeyId
‘ACCESS_KEY_SECRET’ => ”, //從OSS獲得的AccessKeySecret
‘ENDPOINT’ => ‘oss-cn-hangzhou.aliyuncs.com’, //您選定的OSS數據中心訪問域名,例如oss-cn-hangzhou.aliyuncs.com
),

開發環境下的OSS數據中心訪問域名設置為外網

開發環境下的OSS數據中心訪問域名設置為外網

7、實現上傳本地文件至OSS的功能,如修改頭像,如圖7:

實現上傳本地文件至OSS的功能,如修改頭像

實現上傳本地文件至OSS的功能,如修改頭像

8、編輯passport.hmwis.com\Application\Home\Controller\ProfileController.class.php,導入OSS的客戶端類、異常類,如圖8
use OSS\OssClient;
use OSS\Core\OssException;

導入OSS的客戶端類、異常類

導入OSS的客戶端類、異常類

9、實例化OssClient類,調用上傳本地文件方法,如圖9

/**
* 根據Config配置,得到一個OssClient實例
*/
try {
$ossClient = new OssClient(C(‘OSS.ACCESS_KEY_ID’), C(‘OSS.ACCESS_KEY_SECRET’), C(‘OSS.ENDPOINT’), false);
} catch (OssException $e) {
$return[‘status’] = 0;
$return[‘info’] = $e->getMessage();
/* 返回JSON數據 */
$this->ajaxReturn($return);
}
$bucket = ‘avatar-ygt-cm’;
try {
$ossClient->uploadFile($bucket,$oss_file_path,$avatar);
} catch (OssException $e) {
$return[‘status’] = 0;
$return[‘info’] = $e->getMessage();
/* 返回JSON數據 */
$this->ajaxReturn($return);
}

實例化OssClient類,調用上傳本地文件方法

實例化OssClient類,調用上傳本地文件方法

10、基於ThinkPHP文件上傳操作使用Think\Upload類定制,實現通過表單上傳文件至OSS,復制passport.hmwis.com\ThinkPHP\Library\Think\Upload.class.php至passport.hmwis.com\ThinkPHP\Library\Vendor\OSS\OssUpload.class.php,編輯passport.hmwis.com\ThinkPHP\Library\Vendor\OSS\OssUpload.class.php,如圖10

namespace OSS;
use OSS\OssClient;
use OSS\Core\OssException;

基於ThinkPHP文件上傳操作使用Think\Upload類定制,實現通過表單上傳文件至OSS

基於ThinkPHP文件上傳操作使用Think\Upload類定制,實現通過表單上傳文件至OSS

11、編輯默認上傳配置,如圖11

/**
* 默認上傳配置
* @var array
*/
private $config = array(
‘accessKeyId’ => ‘l0k4ZMxs44FAjAWH’, //AccessKeyId
‘accessKeySecret’ => ‘hjU4DPhzKl6pwT6K0HlTkVMNaE9rZo’, //AccessKeySecret
‘endpoint’ => ‘oss-cn-hangzhou.aliyuncs.com’, //區域地址
‘mimes’ => array(), //允許上傳的文件MiMe類型
‘maxSize’ => 0, //上傳的文件大小限制 (0-不做限制)
‘exts’ => array(), //允許上傳的文件后綴
‘autoSub’ => true, //自動子目錄保存文件
‘subName’ => array(‘date’, ‘Y-m-d’), //子目錄創建方式,[0]-函數名,[1]-參數,多個參數使用數組
‘rootPath’ => ‘./Uploads/’, //保存根路徑
‘savePath’ => ”, //保存路徑
‘saveName’ => array(‘uniqid’, ”), //上傳文件命名規則,[0]-函數名,[1]-參數,多個參數使用數組
‘saveExt’ => ”, //文件保存后綴,空則使用原后綴
‘replace’ => false, //存在同名是否覆蓋
‘hash’ => true, //是否生成hash編碼
‘callback’ => false, //檢測文件是否存在回調,如果存在返回文件信息數組
);

注:主要為取消文件上傳驅動及文件目錄相關的操作功能實現,由於改動過多,建議查看SVN日志,或者直接復制OssUpload.class.php;

主要為取消文件上傳驅動及文件目錄相關的操作功能實現,由於改動過多,建議查看SVN日志,或者直接復制OssUpload.class.php

主要為取消文件上傳驅動及文件目錄相關的操作功能實現,由於改動過多,建議查看SVN日志,或者直接復制OssUpload.class.php

12、編輯上傳文件方法upload,如圖12

/* 保存文件 並記錄保存成功的文件 */
/*
if ($this->uploader->save($file,$this->replace)) {
unset($file[‘error’], $file[‘tmp_name’]);
$info[$key] = $file;
} else {
$this->error = $this->uploader->getError();
}*/
/**
* 根據Config配置,得到一個OssClient實例
*/
try {
$ossClient = new OssClient($this->accessKeyId, $this->accessKeySecret, $this->endpoint, false);
} catch (OssException $e) {
$this->error = $e->getMessage();
}

/**
* 上傳本地文件
*/
$bucket = ‘avatar-ygt-cm’;
$object = $this->rootPath . $file[‘savepath’] . $file[‘savename’];
try {
$ossClient->uploadFile($bucket,$object,$file[‘tmp_name’]);
unset($file[‘error’], $file[‘tmp_name’]);
$file[‘oss’] = $bucket . ‘/’ . $object;
$info[$key] = $file;
} catch (OssException $e) {
$this->error = $e->getMessage();
}

編輯上傳文件方法upload

編輯上傳文件方法upload

13、實現通過表單上傳文件至OSS,編輯passport.hmwis.com\Application\Home\Controller\ProfileController.class.php,導入OSS的文件上傳類
use OSS\OssUpload;
所有上傳實現建議參考Think\Upload類的文檔,基本上一致

 

 

 

在OneThink(ThinkPHP3.2.3)中整合阿里雲OSS的PHP-SDK2.0.4,實現Web端直傳,服務端簽名直傳並設置上傳回調的實現流程

1、在OneThink(ThinkPHP3.2.3)中整合阿里雲OSS的PHP-SDK2.0.4,實現Web端直傳,服務端簽名直傳並設置上傳回調,前提是先參照:http://www.shuijingwanwq.com/2016/01/13/909/ 實現,設置Bucekt(storage4-hmwis-com)的CORS,如圖0;

設置Bucekt(storage4-hmwis-com)的CORS

設置Bucekt(storage4-hmwis-com)的CORS

2、查看幫助文檔Web端直傳實踐——服務端簽名直傳並設置上傳回調,下載代碼示例,應用服務器返回簽名代碼:oss-h5-upload-js-php-callback.tar.gz、回調應用服務器版本:callback-php-demo.zip,如圖1、2

應用服務器返回簽名代碼:oss-h5-upload-js-php-callback.tar.gz

應用服務器返回簽名代碼:oss-h5-upload-js-php-callback.tar.gz

回調應用服務器版本:callback-php-demo.zip

回調應用服務器版本:callback-php-demo.zip

3、復制:E:\wwwroot\oss-h5-upload-js-php-callback\php\get.php中的function gmt_iso8601至E:\wwwroot\ke.hmwis.com\Application\Common\Common\function.php,如圖3

復制function gmt_iso8601

復制function gmt_iso8601

4、打開:E:\wwwroot\ke.hmwis.com\Application\Home\Controller\FileController.class.php,新建上傳表單的方法,如圖4

/* 文件上傳表單,基於OSS,web直傳 */
public function ossUpload(){
$this->display();
}

新建上傳表單的方法

新建上傳表單的方法

5、打開:E:\wwwroot\oss-h5-upload-js-php\index.html,復制全部內容至:E:\wwwroot\ke.hmwis.com\Application\Home\View\default\File\ossUpload.html,且調整其中的相應文件路徑,如圖5

編輯上傳表單模板

編輯上傳表單模板

6、打開:http://ke.ygt.cm/File/ossUpload.html ,查看網頁源代碼,如圖6

查看上傳表單網頁源代碼

查看上傳表單網頁源代碼

7、復制E:\wwwroot\oss-h5-upload-js-php-callback下的相應文件至:E:\wwwroot\static.hmwis.com\ke\Public\static\oss目錄,如圖7

復制相應文件至對應資源目錄下

復制相應文件至對應資源目錄下

8、打開:E:\wwwroot\oss-h5-upload-js-php-callback\php\get.php,導入OSS的客戶端類、異常類,如圖8

use OSS\OssClient;
use OSS\Core\OssException;

導入OSS的客戶端類、異常類

導入OSS的客戶端類、異常類

9、打開:E:\wwwroot\oss-h5-upload-js-php-callback\php\get.php,復制除function gmt_iso8601之外的所有代碼至:E:\wwwroot\ke.hmwis.com\Application\Home\Controller\FileController.class.php下的public function ossGet(),且實例化OSS2.0.4的客戶端類,如圖9

新建public function ossGet(),且實例化OSS2.0.4的客戶端類

新建public function ossGet(),且實例化OSS2.0.4的客戶端類

10、配置zhidao.ygt.cm的虛擬主機:

* 注意:如果要使用HTTP_AUTHORIZATION頭,你需要先在apache或者nginx中設置rewrite,以apache為例,修改
* 配置文件/etc/httpd/conf/httpd.conf(以你的apache安裝路徑為准),如圖10

添加一行:

RewriteRule .* – [env=HTTP_AUTHORIZATION:%{HTTP:Authorization},last]

配置zhidao.ygt.cm的虛擬主機,以使用HTTP_AUTHORIZATION頭

配置zhidao.ygt.cm的虛擬主機,以使用HTTP_AUTHORIZATION頭

11、編輯:E:\wwwroot\static.hmwis.com\ke\Public\static\oss\upload.js,如圖11

phpUrl = ‘http://ke.ygt.cm/File/ossGet.html’

設置phpUrl

設置phpUrl

12、編輯:E:\wwwroot\oss-h5-upload-js-php-callback\callback.php,如圖12

file_put_contents(‘./data/1.txt’, json_encode($body));

編輯callback.php,以測試回調數據

編輯callback.php,以測試回調數據

13、測試上傳成功,如圖13、14

網頁直傳測試成功

網頁直傳測試成功

OSS上檢測文件已經上傳成功

OSS上檢測文件已經上傳成功

14、測試回調成功,查看zhidao.ygt.cm/data/1.txt,如圖15

“filename=user-dir%2F10.png&size=218185&mimeType=image%2Fpng&height=453&width=674”

測試回調成功

測試回調成功


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM