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

Object Storage Service:アップロードコールバック (PHP SDK 1.0)

最終更新日:Nov 30, 2025

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

注意事項

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

  • このトピックでは、OSS エンドポイントを使用して `OSSClient` インスタンスを作成します。カスタムドメイン名またはセキュリティトークンサービス (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';
}
use OSS\Credentials\EnvironmentVariableCredentialsProvider;
use OSS\OssClient;

// 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
$provider = new EnvironmentVariableCredentialsProvider();
// バケットが所在するリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
$endpoint = "yourEndpoint";
// バケット名を指定します。例: examplebucket。
$bucket= "examplebucket";
// オブジェクトの完全なパスを指定します。例: exampledir/exampleobject.txt。バケット名を完全なパスに含めないでください。
$object = "exampledir/exampleobject.txt";

$config = array(
        "provider" => $provider,
        "endpoint" => $endpoint,
        "signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
        "region"=> "cn-hangzhou"
    );
    $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"
    }';

// コールバックリクエストのカスタムパラメーターを指定します。各カスタムパラメーターはキーと値で構成されます。キーは 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';
}
use OSS\Credentials\EnvironmentVariableCredentialsProvider;
use OSS\OssClient;
use OSS\CoreOssException;
use OSS\Core\OssUtil;

// 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
$provider = new EnvironmentVariableCredentialsProvider();
// バケットが所在するリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
$endpoint = "yourEndpoint";
// バケット名を指定します。例: examplebucket。
$bucket= "examplebucket";
// オブジェクトの完全なパスを指定します。例: exampledir/exampleobject.txt。バケット名を完全なパスに含めないでください。
$object = "exampledir/exampleobject.txt";
// アップロードするローカルファイルの完全なパスを指定します。例: D:\\localpath\\examplefile.txt。デフォルトでは、ローカルファイルの完全なパスを指定しない場合、ローカルファイルはサンプルプログラムが属するプロジェクトのパスからアップロードされます。
$uploadFile = "D:\\localpath\\examplefile.txt";

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

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

print(__FUNCTION__ . ": initiateMultipartUpload OK" . "\n");
/*
 * 手順 2: パートをアップロードします。
 */
$partSize = 10 * 1024 * 1024;
$uploadFileSize = sprintf('%u',filesize($uploadFile));
$pieces = $ossClient->generateMultiuploadParts($uploadFileSize, $partSize);
$responseUploadPart = array();
$uploadPosition = 0;
$isCheckMd5 = true;
foreach ($pieces as $i => $piece) {
    $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 {
        // パートをアップロードします。
        $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"
    }';

// コールバックリクエストのカスタムパラメーターを指定します。各カスタムパラメーターはキーと値で構成されます。キーは 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 操作の詳細については、「Callback」をご参照ください。