AppendObject操作を呼び出して、既存の追加可能オブジェクトにコンテンツを追加できます。
使用上の注意
このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。 OSSと同じリージョンにある他のAlibaba CloudサービスからOSSにアクセスする場合は、内部エンドポイントを使用します。 OSSリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。
このトピックでは、アクセス資格情報は環境変数から取得します。 アクセス資格情報の設定方法の詳細については、「アクセス資格情報の設定」をご参照ください。
このトピックでは、OSSエンドポイントを使用してOSSClientインスタンスを作成します。 カスタムドメイン名またはSecurity Token Service (STS) を使用してOSSClientインスタンスを作成する場合は、「OSSClientインスタンスの作成」をご参照ください。
追加アップロードを使用するには、
oss:PutObject
権限が必要です。 詳細については、「RAMユーザーへのカスタムポリシーのアタッチ」をご参照ください。コンテンツを追加するオブジェクトが存在しない場合、AppendObject操作を呼び出すと追加可能なオブジェクトが作成されます。
コンテンツを追加するオブジェクトが存在する場合:
オブジェクトが追加可能なオブジェクトであり、追加操作が開始される指定された位置が現在のオブジェクトサイズに等しい場合、データはオブジェクトの最後に追加されます。
オブジェクトが追加可能オブジェクトであり、追加操作の開始位置が現在のオブジェクトサイズと等しくない場合、PositionNotEqualToLengthエラーが返されます。
オブジェクトが追加可能オブジェクトでない場合、ObjectNotAppendableエラーが返されます。
CopyObject操作は、追加可能なオブジェクトでは実行できません。
追加アップロードを実行して文字列をアップロードする
次のサンプルコードは、examplebucketバケット内のsrcexampleobject.txtオブジェクトに追加アップロードを実行して文字列を順番にアップロードする方法の例を示しています。
<?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_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。
$provider = new EnvironmentVariableCredentialsProvider();
// この例では、中国 (杭州) リージョンのエンドポイントが使用されます。 実際のエンドポイントを指定します。
$end point = "https://oss-cn-hangzhou.aliyuncs.com";
// バケットの名前を指定します。
$bucket= "examplebucket";
// オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。
$object = "srcexampleobject.txt";
// アップロードする文字列を順番に指定します。 最初の追加アップロード、2番目の追加アップロード、および3番目の追加アップロード後に取得されるオブジェクトコンテンツが、それぞれHello OSS、Hi OSS、およびOSS OKであることを指定します。
$content_array = array('Hello OSS', 'Hi OSS', 'OSS OK');
$options=配列 (
'header'=> 配列 (
// オブジェクトのダウンロード時のwebページのキャッシュ動作を指定します。
// 'Cache-Control' => 'no-cache' 、
// ダウンロードしたオブジェクトの名前を指定します。
// 'Content-Disposition' => 'attachment;filename=oss_download.jpg '、
// オブジェクトのコンテンツエンコーディング形式を指定します。
// 'Content-Encoding' => 'utf-8' 、
// リクエストの有効期間を指定します。
// 'Expires' => 'Fri、31 Dec 2021 16:57:01 GMT '、
// 追加アップロードタスクを実行するときに、同じ名前のオブジェクトを上書きするかどうかを指定します。 この例では、このパラメーターはtrueに設定されています。これは、既存のオブジェクトを同じ名前のオブジェクトで上書きできないことを示します。
// 'x-oss-forbid-overwrite' => 'true' 、
// オブジェクトの各部分の暗号化に使用するサーバー側の暗号化方法を指定します。
// 'x-oss-server-side-encryption'=> 'AES256' 、
// オブジェクトの暗号化に使用するアルゴリズムを指定します。
// 'x-oss-server-side-data-encryption'=>'SM4' 、
// オブジェクトのストレージクラスを指定します。
// 'x-oss-storage-class' => 'Standard' 、
// オブジェクトのアクセス制御リスト (ACL) を指定します。
// 'x-oss-object-acl' => 'private' 、
),
);
try {
$config=配列 (
"provider" => $provider、
"endpoint" => $end ポイント、
);
$ossClient = new OssClient($config);
// 最初の追加アップロードを実行します。 最初の追加アップロードの位置は0で、次の追加アップロードの位置は応答に含まれます。 次の追加アップロードの開始位置は、オブジェクトの現在の長さです。
$position = $ossClient->appendObject($bucket, $object, $content_array[0], 0,$options);
$position = $ossClient->appendObject($bucket, $object, $content_array[1], $position,$options);
$position = $ossClient->appendObject($bucket, $object, $content_array[2], $position,$options);
} catch(OssException $e) {
printf(__FUNCTION__ . ": FAILED\n");
printf($e->getMessage()) 。 "\n");
戻ります。}
print(__FUNCTION__) 。 ": OK" 。 "\n");
追加アップロードを実行してローカルファイルをアップロードする
次のサンプルコードは、examplebucket内のexampleobject.txtオブジェクトに追加アップロードを実行して、examplefilea.txt、examplefileb.txt、およびexamplefilec.txtファイルのコンテンツを順番にアップロードする方法の例を示しています。
<?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_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。
$provider = new EnvironmentVariableCredentialsProvider();
// この例では、中国 (杭州) リージョンのエンドポイントが使用されます。 実際のエンドポイントを指定します。
$end point = "https://oss-cn-hangzhou.aliyuncs.com";
// バケットの名前を指定します。
$bucket= "examplebucket";
// オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。
$object = "exampleobject.txt";
// アップロードするローカルファイルのフルパスを指定します。 デフォルトでは、ローカルファイルのフルパスを指定しない場合、サンプルプログラムが属するプロジェクトのパスからローカルファイルがアップロードされます。
$filePath = "D :\\ localpath\\examplefilea.txt";
$filePath1 = "D :\\ localpath\\examplefileb.txt";
$filePath2 = "D :\\ localpath\\examplefilec.txt";
try {
$config=配列 (
"provider" => $provider、
"endpoint" => $end ポイント、
);
$ossClient = new OssClient($config);
// 最初の追加アップロードを実行します。 最初の追加アップロードの位置は0で、次の追加アップロードの位置は応答に含まれます。 次の追加アップロードの開始位置は、オブジェクトの現在の長さです。
$position = $ossClient->appendFile($bucket, $object, $filePath, 0);
$position = $ossClient->appendFile($bucket, $object, $filePath1, $position);
$position = $ossClient->appendFile($bucket, $object, $filePath2, $position);
} catch(OssException $e) {
printf(__FUNCTION__ . ": FAILED\n");
printf($e->getMessage()) 。 "\n");
戻ります。}
print(__FUNCTION__) 。 ": OK" 。 "\n");
参考資料
追加アップロードを実行するために呼び出すことができるAPI操作の詳細については、「AppendObject」をご参照ください。