OSS(Obeject Storage Service)是阿里云提供的一種分布式的對象存儲服務,即可以將任意類型的數據存儲到OSS中,然后通過互聯網進行訪問和傳輸。在PHP開發中,如果需要將本地文件上傳至OSS,可以使用阿里云提供的PHP SDK來進行操作。
使用OSS上傳文件的步驟大致如下:
1. 引入阿里云的SDK文件
2. 創建OSSClient實例
3. 上傳本地文件到OSS
下面我們詳細了解一下具體實現方法。
首先,在你的php項目中引入下列命名空間:
use OSS\OssClient;
use OSS\Core\OssException;
OSS的核心類是OSSClient,它在 "oss-php-sdk/OSS/OssClient.php"中,需要引入它。
其次,在工程的根目錄下執行下面命令,安裝oss-php-sdk:php composer.phar require alibabacloud/oss-sdk-php
為了避免composer文件夾被部署到生產環境中,應將php composer.phar require alibabacloud/oss-sdk-php替換為composer require alibabacloud/oss-sdk-php。 或者將composer.phar移至一個不在代碼庫中的未被公開訪問的文件夾中,例如 "/var/www/prod/vendor/bin",并使用以下代碼替換它:mv composer.phar /var/www/prod/vendor/bin/
ln -s /var/www/prod/vendor/bin/composer.phar /usr/local/bin/composer
cd /var/www/prod/
composer require alibabacloud/oss-sdk-php
然后就可以開始編寫PHP代碼了。
1. 創建OSSClient實例
首先,需要在阿里云OSS中創建一個Bucket,并取得其中的 AccessKeyId,AccessKeySecret 和 Endpoint。
AccessKeyId 和 AccessKeySecret 是授權用戶訪問API的密鑰。可以通過阿里云的控制臺中的“ID管理”、“AccessKey”中獲取。
Endpoint 是指阿里云OSS的服務URL。需要根據實際的位置選擇相應的Endpoint。$accessKeyId = "";
$accessKeySecret = "";
$endpoint = "";
// 創建OSSClient實例
$ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);
2. 上傳本地文件到OSS
上傳文件到OSS使用的是putObject()方法。該方法的參數如下:
$ossClient->putObject($bucket, $object, $content, $options = null)
其中,
$bucket:目標存儲空間名
$object:目標文件名
$content:要上傳的文件數據,可以是字符串也可以是文件的絕對路徑。
$options:上傳文件可選參數
例如,上傳文件名為“test.jpg”的文件:$bucket = "";
$object = "test.jpg";
$content = "hello world!";
// 上傳文件到OSS
$result = $ossClient->putObject($bucket, $object, $content);
如果上傳的是本地文件,則需要使用文件的絕對路徑:$bucket = "";
$object = "test.jpg";
$content = "";
// 上傳文件到OSS
$result = $ossClient->putObject($bucket, $object, file_get_contents($content));
putObject()方法還有一些可選參數,可以設置Content-Type、Expires、Cache-Control、Content-Disposition、Content-Encoding、Content-MD5等參數:$options = array(
'OSS_HEADERS' =>array(
'Expires' =>'2012-12-31 12:00:00',
'Cache-Control' =>'max-age=3600',
'Content-Disposition' =>'attachment;filename=my.zip',
'Content-Encoding' =>'gzip',
'Content-MD5' =>'8b1a9953c4611296a827abf8c47804d7'
)
);
$result = $ossClient->putObject($bucket, $object, $content, $options);
使用阿里云OSS上傳文件比較方便,可以極大的減輕服務器的壓力。在使用前,需要先開通阿里云OSS服務。