追加アップロードは、AppendObject メソッドを使用して、既存の追加可能オブジェクトにコンテンツを追加します。
注意事項
このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。 同じリージョン内の他の Alibaba Cloud サービスから OSS にアクセスするには、内部エンドポイントを使用します。 サポートされているリージョンとエンドポイントの詳細については、リージョンとエンドポイントをご参照ください。
このトピックでは、アクセス認証情報は環境変数から取得されます。 アクセス認証情報の設定方法の詳細については、アクセス認証情報の設定をご参照ください。
このトピックでは、OSS エンドポイントを使用して OSSClient インスタンスを作成します。 カスタムドメイン名または Security Token Service (STS) を使用して OSSClient インスタンスを作成する場合は、一般的なシナリオの設定例をご参照ください。
ファイルが存在しない場合、AppendObject 操作を呼び出すと、追加可能オブジェクトが作成されます。
ファイルが存在する場合:
ファイルが追加可能オブジェクトであり、指定された追加位置がファイルの現在の長さと一致する場合、コンテンツはファイルの末尾に追加されます。
ファイルが追加可能オブジェクトであっても、指定された追加位置がファイルの現在の長さと一致しない場合、PositionNotEqualToLength 例外がスローされます。
ファイルが追加可能オブジェクトでない場合 (シンプルアップロードでアップロードされた通常オブジェクトなど)、ObjectNotAppendable 例外がスローされます。
権限
デフォルトでは、Alibaba Cloud アカウントは完全な権限を持っています。 Alibaba Cloud アカウント下の RAM ユーザーまたは RAM ロールは、デフォルトではいかなる権限も持っていません。 Alibaba Cloud アカウントまたはアカウント管理者は、RAM ポリシーまたはバケットポリシーを通じて操作権限を付与する必要があります。
API | アクション | 定義 |
AppendObject |
| この操作を呼び出して、既存のオブジェクトに追加することでオブジェクトをアップロードできます。 |
| 既存のオブジェクトに追加してオブジェクトをアップロードする際に、x-oss-tagging を通じてオブジェクトタグを指定する場合、この権限が必要です。 |
文字列の追加
次のコードは、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';
}
use OSS\Credentials\EnvironmentVariableCredentialsProvider;
use OSS\OssClient;
use OSS\CoreOssException;
// 環境変数からアクセス認証情報を取得します。 このサンプルを実行する前に、環境変数 OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET が設定されていることを確認してください。
$provider = new EnvironmentVariableCredentialsProvider();
// 中国 (杭州) のエンドポイントを例として使用します。 実際のエンドポイントを設定してください。 リージョンとエンドポイントのマッピングの詳細については、「エンドポイント」をご参照ください。
$endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// バケット名を指定します。 バケットの命名規則の詳細については、「バケット」をご参照ください。
$bucket= "examplebucket";
// オブジェクトの完全なパスを指定します。 バケット名を含めないでください。 オブジェクトの命名規則の詳細については、「用語」をご参照ください。
$object = "srcexampleobject.txt";
// 順番に追加する文字列を指定します。 1回目、2回目、3回目の追加操作後、ファイルの内容はそれぞれ "Hello OSS"、"Hi OSS"、"OSS OK" になります。
$content_array = array('Hello OSS', 'Hi OSS', 'OSS OK');
$options = array(
'headers' => array(
// オブジェクトがダウンロードされる際のウェブページのキャッシュ動作を指定します。
// 'Cache-Control' => 'no-cache',
// オブジェクトがダウンロードされる際のオブジェクト名を指定します。
// 'Content-Disposition' => 'attachment;filename=oss_download.jpg',
// 有効期限を指定します。
// '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',
// オブジェクトのアクセス権限を指定します。
// 'x-oss-object-acl' => 'private',
),
);
try{
$config = array(
"provider" => $provider,
"endpoint" => $endpoint,
"signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
"region"=> "cn-hangzhou"
);
$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");
return;
}
print(__FUNCTION__ . ": OK" . "\n"); ローカルファイルの追加
次のコードは、ローカルファイル examplefilea.txt、examplefileb.txt、examplefilec.txt の内容を、examplebucket バケット内の exampleobject.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';
}
use OSS\Credentials\EnvironmentVariableCredentialsProvider;
use OSS\OssClient;
use OSS\CoreOssException;
// 環境変数からアクセス認証情報を取得します。 このサンプルを実行する前に、環境変数 OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET が設定されていることを確認してください。
$provider = new EnvironmentVariableCredentialsProvider();
// 中国 (杭州) のエンドポイントを例として使用します。 実際のエンドポイントを設定してください。
$endpoint = "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 = array(
"provider" => $provider,
"endpoint" => $endpoint,
"signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
"region"=> "cn-hangzhou"
);
$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");
return;
}
print(__FUNCTION__ . ": OK" . "\n"); 関連ドキュメント
追加アップロードに使用される API 操作の詳細については、AppendObject をご参照ください。