すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:OSS SDK for PHPを使用したアップロードコールバックの設定

最終更新日:Mar 12, 2024

オブジェクトがアップロードされると、object Storage Service (OSS) はアプリケーションサーバーにコールバックを送信します。 アップロードコールバックを設定するには、必要なコールバックパラメーターをOSSに送信されるアップロードリクエストに追加するだけです。 このトピックでは、シンプルアップロードとマルチパートアップロードのアップロードコールバックを設定する方法について説明します。

使用上の注意

  • このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。 OSSと同じリージョンにある他のAlibaba CloudサービスからOSSにアクセスする場合は、内部エンドポイントを使用します。 OSSリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。

  • このトピックでは、OSSエンドポイントを使用してOSSClientインスタンスを作成します。 カスタムドメイン名またはSecurity Token Service (STS) を使用してOSSClientインスタンスを作成する場合は、「OSSClientインスタンスの作成」をご参照ください。

単純なアップロードタスクのアップロードコールバックの構成

次のサンプルコードは、単純なアップロードタスクのアップロードコールバックを設定する方法の例を示しています。

<?php
if (is_file(__DIR__) 。 '/../autoload.php')) {
    require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__) 。 '/../vendor/autoload.php')) {
    require_once __DIR__ . '/../vendor/autoload.php';
}
OSS\Credentials\EnvironmentVariableCredentialsProviderを使用します。OSS\OssClientを使用します。// 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。  
$provider = new EnvironmentVariableCredentialsProvider();
// バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 
$end point = "yourEndpoint";
// バケットの名前を指定します。 例: examplebucket. 
$bucket= "examplebucket";
// オブジェクトのフルパスを指定します。 例: exampledir/exampleobject.txt。 バケット名をフルパスに含めないでください。 
$object = "exampledir/exampleobject.txt";

$config=配列 (
        "provider" => $provider、
        "endpoint" => $end ポイント、
    );
    $ossClient = new OssClient($config);

// オブジェクトをアップロードするときにコールバックを設定します。 
// callbackUrlは、コールバック要求を受信するコールバックサーバーのアドレスを指定します。 例: https://oss-demo.aliyuncs.com:23450。 
// (オプション) callbackHostをコールバックリクエストヘッダーに含まれるHostフィールドの値に設定します。 
$url =
    '{
        "callbackUrl":"yourCallbackServerUrl" 、
        "callbackHost":"yourCallbackServerHost" 、
        "callbackBody":"bucket=${bucket}&object=${object}&etag=${etag}&size=${size}&mimeType=${mimeType}&imageInfo.height=${imageInfo.height}&imageInfo.width=${imageInfo.width}&imageInfo.format=${imageInfo.format}&my_var1=${x:var1}&my_var2=${x:var2}",
        "callbackBodyType":"application/x-www-form-urlencoded"
    } ';

// コールバック要求のカスタムパラメータを指定します。 Each custom parameter consists of a key and a value. The key must start with x:. 
$var =
    '{
        "x:var1":"value1",
        "x:var2":"value2"
    } ';
$options = array(OssClient::OSS_CALLBACK => $url、
    OssClient::OSS_CALLBACK_VAR => $var
);
$result = $ossClient->putObject($bucket, $object, file_get_contents(__FILE__), $options);
print_r($result['body']);
print_r($result['info']['http_code']); 

マルチパートアップロードタスクのアップロードコールバックの構成

次のサンプルコードは、マルチパートアップロードタスクのアップロードコールバックを設定する方法の例を示しています。

<?php
if (is_file(__DIR__) 。 '/../autoload.php')) {
    require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__) 。 '/../vendor/autoload.php')) {
    require_once __DIR__ . '/../vendor/autoload.php';
}
OSS\Credentials\EnvironmentVariableCredentialsProviderを使用します。OSS\OssClientを使用します。OSS\CoreOssExceptionを使用します。OSS\Core\OssUtilを使用します。// 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。  
$provider = new EnvironmentVariableCredentialsProvider();
// バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 
$end point = "yourEndpoint";
// バケットの名前を指定します。 例: examplebucket. 
$bucket= "examplebucket";
// オブジェクトのフルパスを指定します。 例: exampledir/exampleobject.txt。 バケット名をフルパスに含めないでください。 
$object = "exampledir/exampleobject.txt";
// アップロードするローカルファイルのフルパスを指定します。 例: D :\\ localpath\\examplefile.txt。 デフォルトでは、ローカルファイルのフルパスを指定しない場合、サンプルプログラムが属するプロジェクトのパスからローカルファイルがアップロードされます。 
$uploadFile = "D :\\ localpath\\examplefile.txt";

/**
 * ステップ1: マルチパートアップロードタスクを開始し、アップロードIDを取得します。 
 * /

$config=配列 (
        "provider" => $provider、
        "endpoint" => $end ポイント、
    );
     $ossClient = new OssClient($config);
// アップロードIDが返されます。 IDは、マルチパートアップロードタスクの一意の識別子です。 アップロードIDに基づいて、マルチパートアップロードタスクのキャンセルやクエリなどの操作を開始できます。 
$uploadId = $ossClient->initiateMultipartUpload($bucket, $object);

print(__FUNCTION__) 。 ": initiateMultipartUpload OK" 。 "\n");
/*
 * Step 2: Upload parts. 
 * /
$partSize = 10*1024*1024;
$uploadFileSize = sprintf('% u',filesize($uploadFile));
$pieces = $ossClient->generateMultiuploadParts($uploadFileSize、$partSize);
$responseUploadPart = array();
$uploadPosition = 0;
$isCheckMd5 = true;
foreach ($i => $pieceとして $pieces) {
    $fromPos = $uploadPosition + (integer)$piece[$ossClient::OSS_SEEK_TO];
    $toPos = (integer)$piece[$ossClient::OSS_LENGTH] + $fromPos - 1;
    $upOptions = array(
        $ossClient::OSS_FILE_UPLOAD => $uploadFile,
        $ossClient::OSS_PART_NUM => ($i + 1),
        $ossClient::OSS_SEEK_TO => $fromPos,
        $ossClient::OSS_LENGTH => $toPos - $fromPos + 1,
        $ossClient::OSS_CHECK_MD5 => $isCheckMd5,
    );
    // MD5検証を実行します。 
    if ($isCheckMd5) {
        $contentMd5 = OssUtil::getMd5SumForFile($uploadFile, $fromPos, $toPos);
        $upOptions[$ossClient::OSS_CONTENT_MD5] = $contentMd5;
    }
    try {
        // Upload the parts. 
        $responseUploadPart[] = $ossClient->uploadPart($bucket, $object, $uploadId, $upOptions);
    } catch(OssException $e) {
        printf(__FUNCTION__ . ": initiateMultipartUpload, uploadPart - part #{$ i} FAILED\n");
        printf($e->getMessage()) 。 "\n");
        return;
    }
    printf(__FUNCTION__ . ": initiateMultipartUpload, uploadPart - part #{$ i} OK\n");
}
// $uploadPartsは、各パーツのETagとパーツ番号で構成される配列です。 
$uploadParts = array();
foreach ($responseUploadPart as $i => $eTag) {
    $uploadParts[] = array(
        'PartNumber' => ($i + 1),
        'ETag' => $eTag,
    );
}

/**
 * ステップ3: マルチパートアップロードタスクを完了します。 
 * /
// callbackUrlは、コールバック要求を受信するコールバックサーバーのアドレスを指定します。 例: http://oss-demo.aliyuncs.com:23450またはhttp:// 127.0.0.1:9090 
// (オプション) callbackHostをコールバックリクエストヘッダーに含まれるHostフィールドの値に設定します。 
$json =
    '{
        "callbackUrl":"<yourCallbackServerUrl>",
        "callbackHost":"<yourCallbackServerHost>",
        "callbackBody":"{\"mimeType\":${mimeType},\"size\":${size},\"x:var1\":${x:var1},\"x:var2\":${x:var2}}",
        "callbackBodyType":"application/json"
    } ';

// コールバック要求のカスタムパラメータを指定します。 Each custom parameter consists of a key and a value. The key must start with x:. 
$var =
    '{
        "x:var1":"value1",
        "x:var2":"value2"
    } ';
$options = array(OssClient::OSS_CALLBACK => $json、
    OssClient::OSS_CALLBACK_VAR => $var);
// この操作を実行するときに、有効なすべての $uploadPartsを指定します。 OSSが $uploadPartsを受信すると、OSSはすべてのパーツを1つずつ検証します。 すべての部品が検証された後、OSSは部品を完全なオブジェクトに結合します。 
$ossClient->completeMultipartUpload($bucket、$object、$uploadId、$uploadParts、$options);

printf(__FUNCTION__) 。 ": completeMultipartUpload OK\n"); 

参考資料

  • アップロードコールバックの設定に使用される完全なサンプルコードの詳細については、GitHubをご覧ください。

  • アップロードコールバックを設定するために呼び出すことができるAPI操作の詳細については、「コールバック」をご参照ください。