Object Storage Service (OSS) に保存されているオブジェクトは、キー、データ、およびオブジェクトメタデータで構成されます。 オブジェクトメタデータは、オブジェクト属性を記述する。 オブジェクトメタデータには、標準HTTPヘッダーとユーザーメタデータが含まれます。 標準のHTTPヘッダーを設定することで、オブジェクトキャッシュポリシーや強制オブジェクトダウンロードポリシーなどのカスタムHTTPリクエストポリシーを作成できます。 オブジェクトのユーザーメタデータを設定して、オブジェクトの目的や属性を識別することもできます。
使用上の注意
このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。 OSSと同じリージョンにある他のAlibaba CloudサービスからOSSにアクセスする場合は、内部エンドポイントを使用します。 OSSリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。
このトピックでは、アクセス資格情報は環境変数から取得します。 アクセス資格情報の設定方法の詳細については、「アクセス資格情報の設定」をご参照ください。
このトピックでは、OSSエンドポイントを使用してOSSClientインスタンスを作成します。 カスタムドメイン名またはSecurity Token Service (STS) を使用してOSSClientインスタンスを作成する場合は、「OSSClientインスタンスの作成」をご参照ください。
オブジェクトメタデータを設定するには、
oss:PutObject
権限が必要です。 オブジェクトメタデータを照会するには、oss:GetObject
権限が必要です。 詳細については、「RAMユーザーへのカスタムポリシーのアタッチ」をご参照ください。
オブジェクトメタデータの設定
次のコードでは、標準のHTTPヘッダーとユーザーメタデータを設定する方法の例を示します。
標準HTTPヘッダーの設定
com.aliyun.oss.ClientExceptionをインポートします。com.aliyun.oss.OSSをインポートします。impor t com.aliyun.oss.com mon.auth.*; com.aliyun.oss.OSSClientBuilderをインポートします。com.aliyun.oss.OSSExceptionをインポートします。impor t com.aliyun.oss.com mon.utils.BinaryUtil; impor t com.aliyun.oss.com mon.utils.DateUtil; com.aliyun.oss.mo del.ObjectMetadataをインポートします。java.io.ByteArrayInputStreamをインポートします。public classデモ { public static void main(String[] args) throws Exception { // この例では、中国 (杭州) リージョンのエンドポイントが使用されます。 実際のエンドポイントを指定します。 String endpoint = "https://oss-cn-hangzhou.aliyuncs.com"; // 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider(); // Specify the bucket name. 例: examplebucket. String bucketName = "examplebucket"; // オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 例: testfolder/exampleobject.txt。 文字列objectName = "testfolder/exampleobject.txt"; String content = "Hello OSS"; // Create an OSSClient instance. OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider); try { // アップロードされたオブジェクトのメタデータを追加します。 ObjectMetadata meta = new ObjectMetadata(); String md5 = BinaryUtil.toBase64String(BinaryUtil.calculateMd5(content.getBytes())); // Enable MD5 verification. MD5検証が有効になると、OSSはアップロードされたオブジェクトのMD5ハッシュを計算し、このMD5ハッシュをリクエストで指定されたものと比較します。 2つの値が異なる場合、エラーが報告される。 meta.setContentMD5(md5); // アップロードするコンテンツの種類を指定します。 ブラウザは、オブジェクトのコンテンツタイプに基づいて、オブジェクトを読み取るために使用される形式とエンコードタイプを決定します。 コンテンツタイプが指定されていない場合、オブジェクト名拡張子に基づいてコンテンツタイプが生成されます。 利用可能な拡張がない場合、デフォルト値application/octet-streamがコンテンツタイプとして使用されます。 meta.setContentType("text/plain"); // コンテンツのダウンロード時にオブジェクトの名前を指定します。 meta.setContentDisposition("attachment; filename=\"DownloadFilename\""); // アップロードするオブジェクトの長さを指定します。 実際のオブジェクトの長さが指定された長さより大きい場合、オブジェクトは切り捨てられます。 指定された長さのコンテンツのみがアップロードされます。 実際のオブジェクトの長さが指定された長さより小さい場合、オブジェクトのすべてのコンテンツがアップロードされます。 meta.setContentLength(content.length()); // コンテンツのダウンロード時のwebページのキャッシュ動作を指定します。 meta.setCacheControl("Download Action"); // キャッシュの有効期限をUTCで指定します。 meta.setExpirationTime(DateUtil.parseIso8601Date("2022-10-12T00:00:00.000Z")); // コンテンツのダウンロード時のコンテンツエンコーディング形式を指定します。 meta.setContentEncoding("gzip"); // HTTPヘッダーを設定します。 meta.setHeader("yourHeader", "yourHeaderValue"); // Upload the object. ossClient.putObject(bucketName, objectName, new ByteArrayInputStream(content.getBytes()), meta); } catch (Exception e) { System.out.println("Caught an OSSException, which means your request made it to OSS, " + "しかし、何らかの理由でエラー応答で拒否されました。"); System.out.println("エラーメッセージ:" + oe.getErrorMessage()); System.out.println("エラーコード:" + oe.getErrorCode()); System.out.println("リクエストID:" + oe.getRequestId()); System.out.println("ホストID:" + oe.getHostId()); } catch (ClientException e) { System.out.println("Caught an ClientException, which means the client encountered " + "a serious internal problem while trying to communicate with OSS, " + 「ネットワークにアクセスできないなど」; System.out.println("エラーメッセージ:" + ce.getMessage()); } 最後に{ if (ossClient != null) { ossClient.shutdown(); } } } }
HTTPヘッダーの詳細については、「RFC 2616」をご参照ください。
オブジェクトを記述するユーザーメタデータの設定
パッケージcom.aliyun.oss.de mo; com.aliyun.oss.ClientExceptionをインポートします。com.aliyun.oss.OSSをインポートします。impor t com.aliyun.oss.com mon.auth.*; com.aliyun.oss.OSSClientBuilderをインポートします。com.aliyun.oss.OSSExceptionをインポートします。com.aliyun.oss.mo del.ObjectMetadataをインポートします。java.io.ByteArrayInputStreamをインポートします。public classデモ { public static void main(String[] args) throws Exception { // この例では、中国 (杭州) リージョンのエンドポイントが使用されます。 実際のエンドポイントを指定します。 String endpoint = "https://oss-cn-hangzhou.aliyuncs.com"; // 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider(); // Specify the bucket name. 例: examplebucket. String bucketName = "examplebucket"; // オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 例: testfolder/exampleobject.txt。 文字列objectName = "testfolder/exampleobject.txt"; String content = "Hello OSS"; // Create an OSSClient instance. OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider); try { // オブジェクトのメタデータを追加します。 ObjectMetadata meta = new ObjectMetadata(); // ユーザーメタデータのプロパティパラメータをproperty-valueに設定します。 Base64エンコード方式の使用を推奨します。 meta.addUserMetadata("property", "property-value"); // Upload the object. ossClient.putObject(bucketName, objectName, new ByteArrayInputStream(content.getBytes()), meta); } catch (Exception e) { System.out.println("Caught an OSSException, which means your request made it to OSS, " + "しかし、何らかの理由でエラー応答で拒否されました。"); System.out.println("エラーメッセージ:" + oe.getErrorMessage()); System.out.println("エラーコード:" + oe.getErrorCode()); System.out.println("リクエストID:" + oe.getRequestId()); System.out.println("ホストID:" + oe.getHostId()); } catch (ClientException e) { System.out.println("Caught an ClientException, which means the client encountered " + "a serious internal problem while trying to communicate with OSS, " + 「ネットワークにアクセスできないなど」; System.out.println("エラーメッセージ:" + ce.getMessage()); } 最後に{ if (ossClient != null) { ossClient.shutdown(); } } } }
オブジェクトのメタデータは、オブジェクトと共にダウンロードされる。 オブジェクトには複数のメタデータを含めることができ、メタデータの合計サイズは8 KB以下です。
オブジェクトメタデータの変更
次のコードは、オブジェクトのメタデータを変更する方法の例を示しています。
com.aliyun.oss.ClientExceptionをインポートします。com.aliyun.oss.OSSをインポートします。impor t com.aliyun.oss.com mon.auth.*;
com.aliyun.oss.OSSClientBuilderをインポートします。com.aliyun.oss.OSSExceptionをインポートします。impor t com.aliyun.oss.com mon.utils.DateUtil;
com.aliyun.oss.mo del.CopyObjectRequestをインポートします。com.aliyun.oss.mo del.ObjectMetadataをインポートします。public classデモ {
public static void main(String[] args) throws Exception {
// この例では、中国 (杭州) リージョンのエンドポイントが使用されます。 実際のエンドポイントを指定します。
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// ソースバケットの名前を指定します。
文字列sourceBucketName = "yourSourceBucketName";
// ソースオブジェクトのフルパスを指定します。
文字列sourceObjectName = "yourSourceObjectName";
// 宛先バケットの名前を指定します。 宛先バケットは、ソースバケットと同じリージョンにある必要があります。
文字列destinationBucketName = "yourDestinationBucketName";
// 宛先オブジェクトのフルパスを指定します。
文字列destinationObjectName = "yourDestinationObjectName";
// Create an OSSClient instance.
OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);
try {
// ソースオブジェクトがターゲットオブジェクトと同じであることを指定します。 オブジェクトメタデータを変更するには、ossClient.copyObjectメソッドを呼び出します。
CopyObjectRequest request = new CopyObjectRequest(sourceBucketName, sourceObjectName, destinationBucketName, destinationObjectName);
ObjectMetadata meta = new ObjectMetadata();
// アップロードするコンテンツの種類を指定します。 ブラウザは、オブジェクトのコンテンツタイプに基づいて、オブジェクトを読み取るために使用される形式とエンコードタイプを決定します。 コンテンツタイプが指定されていない場合、オブジェクト名拡張子に基づいてコンテンツタイプが生成されます。 利用可能な拡張がない場合、デフォルト値application/octet-streamがコンテンツタイプとして使用されます。
meta.setContentType("text/plain");
// コンテンツのダウンロード時にオブジェクトの名前を指定します。
meta.setContentDisposition("Download File Name");
// コンテンツのダウンロード時のwebページのキャッシュ動作を指定します。
meta.setCacheControl("Download Action");
// キャッシュの有効期限をUTCで指定します。
meta.setExpirationTime(DateUtil.parseIso8601Date("2022-10-12T00:00:00.000Z"));
// コンテンツのダウンロード時のコンテンツエンコーディング形式を指定します。
meta.setContentEncoding("gzip");
// ヘッダーを設定します。
meta.setHeader("<yourHeader>", "<yourHeaderValue>");
// ユーザーメタデータのプロパティパラメータをproperty-valueに設定します。
meta.addUserMetadata("property", "property-value");
request.setNewObjectMetadata(meta);
// オブジェクトのメタデータを変更します。
ossClient.copyObject(request);
} catch (Exception e) {
System.out.println("Caught an OSSException, which means your request made it to OSS, "
+ "しかし、何らかの理由でエラー応答で拒否されました。");
System.out.println("エラーメッセージ:" + oe.getErrorMessage());
System.out.println("エラーコード:" + oe.getErrorCode());
System.out.println("リクエストID:" + oe.getRequestId());
System.out.println("ホストID:" + oe.getHostId());
} catch (ClientException e) {
System.out.println("Caught an ClientException, which means the client encountered "
+ "a serious internal problem while trying to communicate with OSS, "
+ 「ネットワークにアクセスできないなど」;
System.out.println("エラーメッセージ:" + ce.getMessage());
} 最後に{
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}
オブジェクトメタデータの照会
次の表に、オブジェクトメタデータのクエリに使用できるメソッドを示します。
メソッド | 説明 |
ossClient.getSimplifiedObjectMeta | GetObjectMeta操作を呼び出して、オブジェクトのETag、Size、およびLastModifiedの値を照会します。 |
ossClient.getObjectMetadata | HeadObject操作を呼び出して、オブジェクトのすべてのメタデータを照会します。 |
次のコードでは、オブジェクトメタデータを照会する方法の例を示します。
com.aliyun.oss.ClientExceptionをインポートします。com.aliyun.oss.OSSをインポートします。impor t com.aliyun.oss.com mon.auth.*;
com.aliyun.oss.OSSClientBuilderをインポートします。com.aliyun.oss.OSSExceptionをインポートします。com.aliyun.oss.mo del.ObjectMetadataをインポートします。com.aliyun.oss.mo del.SimplifiedObjectMetaをインポートします。public classデモ {
public static void main(String[] args) throws Exception {
// この例では、中国 (杭州) リージョンのエンドポイントが使用されます。 実際のエンドポイントを指定します。
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// Specify the bucket name. 例: examplebucket.
String bucketName = "examplebucket";
// オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 例: testfolder/exampleobject.txt。
文字列objectName = "testfolder/exampleobject.txt";
// Create an OSSClient instance.
OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);
try {
// バケット名とバケット内のオブジェクトの完全パスを指定します。
// オブジェクトの部分的なメタデータを照会します。
SimplifiedObjectMeta objectMeta = ossClient.getSimplifiedObjectMeta(bucketName、objectName);
System.out.println(objectMeta.getSize());
System.out.println(objectMeta.getETag());
System.out.println(objectMeta.getLastModified());
// アクセス追跡機能が有効になった後、オブジェクトの最終アクセス時刻 (X-Oss-last-access-time) を含むオブジェクトメタデータを照会します。 X-OSS-Last-Access-Timeのクエリには、Java V3.16.0以降のOss SDKのみを使用できます。
System.out.println(objectMeta.getHeaders().get("x-oss-last-access-time"));
// オブジェクトのすべてのメタデータを照会します。
ObjectMetadata metadata = ossClient.getObjectMetadata(bucketName, objectName);
System.out.println(metadata.getContentType());
System.out.println(metadata.getLastModified());
System.out.println(metadata.getExpirationTime());
} catch (Exception e) {
System.out.println("Caught an OSSException, which means your request made it to OSS, "
+ "しかし、何らかの理由でエラー応答で拒否されました。");
System.out.println("エラーメッセージ:" + oe.getErrorMessage());
System.out.println("エラーコード:" + oe.getErrorCode());
System.out.println("リクエストID:" + oe.getRequestId());
System.out.println("ホストID:" + oe.getHostId());
} catch (ClientException e) {
System.out.println("Caught an ClientException, which means the client encountered "
+ "a serious internal problem while trying to communicate with OSS, "
+ 「ネットワークにアクセスできないなど」;
System.out.println("エラーメッセージ:" + ce.getMessage());
} 最後に{
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}
参考資料
オブジェクトメタデータの詳細については、「オブジェクトメタデータの管理」をご参照ください。
オブジェクトメタデータの設定とクエリに使用される完全なサンプルコードについては、GitHubをご覧ください。
シンプルアップロード中にオブジェクトメタデータを設定するために呼び出すことができるAPI操作の詳細については、「PutObject」をご参照ください。
オブジェクトメタデータを照会するために呼び出すAPI操作の詳細については、「GetObjectMeta」および「HeadObject」をご参照ください。