php – Amazon S3 – 使用 SDK PHP 向 API 取得列表與內容

申請

需要用到  AWSAccessKeyIdAWSSecretKey,所以右上角點 個人 > My Security Credentials

點選 Continue to Security Credentials

選第三個,並按下 Create New Access Key。

建立的檔案儲存下來,因為 Amazon 不會記錄你的 Key 跟 Secret,日後需要但忘記的話,只能重新建立喔

下載SDK

官方參考。使用 Compoer 下指定

"aws/aws-sdk-php-resources": "^0.3.0"
<?php 
require_once('vendor/autoload.php');

// 填上你的 key 與 secret
$credentials = new Aws\Credentials\Credentials(Key, Secret);

// 產生S3 的 Client 端
$client = Aws\S3\S3Client::factory(array
(
    'credentials' => $credentials,
    'region' => 'eu-west-1',  // S3 務必使用 eu-west-1
    'version' => 'latest',
));

// 取得 Bucket 列表
$result = $client->listBuckets();

// 讀取每個列表
foreach ($result['Buckets'] as $bucket)
{
    // 讀取 bucket 底下的物件
    $iterator = $client->getIterator('ListObjects',array
    (
        'Bucket' => $bucket['Name'],
    ));

    foreach ($iterator as $object) 
    {
        $result = $client->getObject(array
        (
            'Bucket' => $bucket['Name'],
            'Key'    => $object['Key']
        ));
        $result['Body']; // 這就是檔案內容
    }    
}

 

$result[‘Body’] 取得的檔案是原始格式,如果你想要將這筆 Amazon S3 的 Email 轉寄到你的 Email ,那可以透過 PHP 套件 EmailParser 來解析這份文件的寄件者、標題、寄件時間、內容、夾帶檔案……接著就能轉寄了喔。EmailParser 可以參考這篇

發送轉寄後,不再讓貯體 (Bucket) 中的物件 (Object) 保留。這是因為如果每次觸發 PHP EmailParse 那會重新讀取 Amazon S3 列表,這樣之前轉寄過的又會再轉寄一次。如果要備份原始文件,其實可以存到你的資料庫。

本來有想過轉寄過的物件,改名,再讓 PHP 判斷。但發現 API 似乎沒提供修改物件檔名的方法,只好作罷囉。

 

繼續閱讀

 

 

Comments

發表迴響