メニュー
Amazon Simple Storage Service
開発者ガイド (API Version 2006-03-01)

PHP SDK の低レベル API を使用した、複数のパートに分けたファイルのアップロード

このトピックでは、AWS SDK for PHP のクラスの低レベルマルチパートアップロードを使用して、ファイルを複数のパートに分けてアップロードする手順を示します。

注記

このトピックでは、既に AWS SDK for PHP の使用と PHP サンプルの実行 の説明が実行されていて、AWS SDK for PHP が正しくインストールされていることを前提としています。

PHP SDK の低レベル API のマルチパートファイルアップロードプロセス

1

Amazon S3 クライアントのインスタンスを Aws\S3\S3Client クラスの factory() メソッドを使用して作成します。

2

Aws\S3\S3Client::createMultipartUpload() メソッドを実行して、マルチパートアップロードを開始します。array パラメーターの必須キー、BucketKey に、バケット名とキー名を指定する必要があります。

レスポンス本文から UploadID を取得、保存します。UploadID は、以後のすべてのマルチパートアップロードオペレーションで使用されます。

3

ファイルをパートに分けてアップロードします。それには、各ファイルパートに対して Aws\S3\S3Client::uploadPart() メソッドを実行し、各ファイルパートの終わりに到達するまで待ちます。upload_part() で必須とされる array のパラメーターキーは、BucketKeyUploadIdPartNumber です。次の各ファイルパートをアップロードするには、upload_part() への次の各呼び出しに対して、PartNumber キーの引数として渡す値を 1 だけ増やす必要があります。

upload_part() メソッド呼び出しのレスポンスを配列内に保存します。各レスポンスには、マルチパートアップロードを完了するのに後で必要になる ETag 値が含まれています。

4

Aws\S3\S3Client::completeMultipartUpload() メソッドを実行して、マルチパートアップロードを完了します。completeMultipartUpload() で必須とされる array のパラメーターは、BucketKeyUploadId です。

以下の PHP コード例は、PHP SDK の低レベル API によるファイルのマルチパートアップロードの手順を示しています。

Copy
use Aws\S3\S3Client; $bucket = '*** Your Bucket Name ***'; $keyname = '*** Your Object Key ***'; $filename = '*** Path to and Name of the File to Upload ***'; // 1. Instantiate the client. $s3 = S3Client::factory(); // 2. Create a new multipart upload and get the upload ID. $response = $s3->createMultipartUpload(array( 'Bucket' => $bucket, 'Key' => $keyname )); $uploadId = $response['UploadId']; // 3. Upload the file in parts. $file = fopen($filename, 'r'); $parts = array(); $partNumber = 1; while (!feof($file)) { $result = $s3->uploadPart(array( 'Bucket' => $bucket, 'Key' => $key, 'UploadId' => $uploadId, 'PartNumber' => $partNumber, 'Body' => fread($file, 5 * 1024 * 1024), )); $parts[] = array( 'PartNumber' => $partNumber++, 'ETag' => $result['ETag'], ); } // 4. Complete multipart upload. $result = $s3->completeMultipartUpload(array( 'Bucket' => $bucket, 'Key' => $key, 'UploadId' => $uploadId, 'Parts' => $parts, )); $url = $result['Location']; fclose($file);

例 (低レベルのマルチパートアップロードの PHP SDK API を使用した Amazon S3 バケットへのファイルのアップロード)

以下の PHP コード例では、低レベルの PHP API、マルチパートアップロードを使用して、Amazon S3 バケットにファイルをアップロードしています。PHP 例の実行については、このガイド内の「PHP サンプルの実行」を参照してください。

Copy
<?php // Include the AWS SDK using the Composer autoloader require 'vendor/autoload.php'; use Aws\S3\S3Client; $bucket = '*** Your Bucket Name ***'; $keyname = '*** Your Object Key ***'; $filename = '*** Path to and Name of the File to Upload ***'; // 1. Instantiate the client. $s3 = S3Client::factory(); // 2. Create a new multipart upload and get the upload ID. $result = $s3->createMultipartUpload(array( 'Bucket' => $bucket, 'Key' => $keyname, 'StorageClass' => 'REDUCED_REDUNDANCY', 'ACL' => 'public-read', 'Metadata' => array( 'param1' => 'value 1', 'param2' => 'value 2', 'param3' => 'value 3' ) )); $uploadId = $result['UploadId']; // 3. Upload the file in parts. try { $file = fopen($filename, 'r'); $parts = array(); $partNumber = 1; while (!feof($file)) { $result = $s3->uploadPart(array( 'Bucket' => $bucket, 'Key' => $keyname, 'UploadId' => $uploadId, 'PartNumber' => $partNumber, 'Body' => fread($file, 5 * 1024 * 1024), )); $parts[] = array( 'PartNumber' => $partNumber++, 'ETag' => $result['ETag'], ); echo "Uploading part {$partNumber} of {$filename}.\n"; } fclose($file); } catch (S3Exception $e) { $result = $s3->abortMultipartUpload(array( 'Bucket' => $bucket, 'Key' => $keyname, 'UploadId' => $uploadId )); echo "Upload of {$filename} failed.\n"; } // 4. Complete multipart upload. $result = $s3->completeMultipartUpload(array( 'Bucket' => $bucket, 'Key' => $keyname, 'UploadId' => $uploadId, 'Parts' => $parts, )); $url = $result['Location']; echo "Uploaded {$filename} to {$url}.\n";

関連リソース

このページの内容: