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

Object Storage Service:オブジェクトメタデータの管理

最終更新日:May 27, 2025

Object Storage Service (OSS) に保存されているオブジェクトは、キー、データ、およびオブジェクトメタデータで構成されています。オブジェクトメタデータは、オブジェクトを記述します。オブジェクトメタデータには、標準 HTTP ヘッダーとユーザーメタデータが含まれます。標準 HTTP ヘッダーを設定することで、オブジェクトキャッシュポリシーや強制オブジェクトダウンロードポリシーなどのカスタム HTTP リクエストポリシーを作成できます。また、ユーザーメタデータを設定して、オブジェクトの目的または属性を識別することもできます。

標準 HTTP ヘッダー

OSS は、バケットにアップロードされた各オブジェクトの標準 HTTP ヘッダーを保持します。次の表に、標準 HTTP ヘッダーを示します。

標準 HTTP ヘッダー

説明

Content-Type

オブジェクトのメディアタイプ。ブラウザは、オブジェクトのメディアタイプに基づいて、オブジェクトの読み取りに使用する形式とエンコードタイプを決定します。このヘッダーが指定されていない場合、OSS はオブジェクト名の拡張子に基づいて値を割り当てます。オブジェクト名に拡張子がない場合、デフォルト値 application/octet-stream がオブジェクトのメディアタイプとして使用されます。オブジェクトのメディアタイプの指定方法の詳細については、「Content-Type ヘッダーを設定するにはどうすればよいですか?」をご参照ください。

Content-Encoding

オブジェクトのエンコードに使用されるメソッド。オブジェクトのエンコードタイプに基づいて、このヘッダーを指定する必要があります。指定しないと、クライアントとして機能するブラウザがオブジェクトのエンコードタイプの解析に失敗したり、オブジェクトのダウンロードに失敗したりする可能性があります。オブジェクトがエンコードされていない場合は、このヘッダーを空のままにします。有効な値:

  • identity (デフォルト): OSS はオブジェクトを圧縮またはエンコードしません。

  • gzip: OSS は、1977 年に Lempel と Ziv によって作成された LZ77 圧縮アルゴリズムと 32 ビット巡回冗長検査 (CRC) を使用してオブジェクトをエンコードします。

  • compress: OSS は、Lempel-Ziv-Welch (LZW) 圧縮アルゴリズムを使用してオブジェクトをエンコードします。

  • deflate: OSS は、zlib ライブラリと deflate アルゴリズムを使用してオブジェクトをエンコードします。

  • br: OSS は、Brotli アルゴリズムを使用してオブジェクトをエンコードします。

Content-Encoding の詳細については、「RFC 2616」をご参照ください。

重要

HTML、JavaScript、XML、JSON オブジェクトなどの静的 Web ページオブジェクトにアクセスしたときに、GZIP オブジェクトに圧縮するには、このヘッダーを空のままにし、リクエストに Accept-Encoding: gzip ヘッダーを追加する必要があります。

Content-Language

オブジェクトコンテンツの言語。たとえば、オブジェクトのコンテンツが簡体字中国語で記述されている場合は、このヘッダーを zh-CN に設定できます。

Content-Disposition

オブジェクトの表示に使用されるメソッド。有効な値:

  • Content-Disposition:inline: コンテンツプレビューのために、オブジェクトがブラウザに表示されます。

  • Content-Disposition:attachment: オブジェクトは、元のオブジェクト名でブラウザの指定されたダウンロードパスにダウンロードされます。

  • Content-Disposition:attachment; filename="yourFileName": オブジェクトは、カスタムオブジェクト名でブラウザの指定されたダウンロードパスにダウンロードされます。

    yourFileName は、ダウンロードされたオブジェクトのカスタム名を指定します (例: example.jpg)。

オブジェクトをブラウザの指定されたダウンロードパスにダウンロードする場合は、次の点に注意してください。

説明
  • オブジェクトの名前にアスタリスク (*) やスラッシュ (/) などの特殊文字が含まれている場合、ダウンロードされたオブジェクトの名前がエスケープされる場合があります。たとえば、example*.jpg をローカルコンピュータにダウンロードすると、example*.jpgexample_.jpg としてエスケープされる場合があります。

  • オブジェクト名に日本語文字が含まれるオブジェクトのダウンロードで、ファイル名に文字化けしたローカルファイルが作成されないようにするには、オブジェクト名の日本語文字を URL エンコードする必要があります。たとえば、OSS 内の Test.txt オブジェクトが元のオブジェクト名 Test.txt のローカルファイルとしてダウンロードされるようにするには、Content-Disposition ヘッダーを attachment;filename=%E6%B5%8B%E8%AF%95.txt;filename*=UTF-8''%E6%B5%8B%E8%AF%95.txt に設定する必要があります。これは、"attachment;filename="+URLEncoder.encode("Test","UTF-8")+".txt;filename*=UTF-8''"+URLEncoder.encode("Test","UTF-8")+".txt" から派生しています。

オブジェクト URL を使用してオブジェクトにアクセスしたときに、オブジェクトがプレビューされるか、添付ファイルとしてダウンロードされるかは、オブジェクトが保存されているバケットの作成時刻、OSS のアクティブ化時刻、およびドメイン名タイプによって決まります。詳細については、「URL を使用して画像オブジェクトにアクセスしたときに、画像オブジェクトが添付ファイルとしてダウンロードされ、プレビューできない場合はどうすればよいですか?」をご参照ください。

Cache-Control

説明

Cache-Control が設定されていない場合、OSS はレスポンスヘッダーでこのフィールドを返しません。つまり、Cache-Control フィールドは存在しません。この時点で、オブジェクトのキャッシュ動作は、ブラウザ自体のキャッシュポリシーによって決定されます。

オブジェクトのキャッシュ動作。有効な値:

  • no-cache: キャッシュされたコンテンツを直接使用することはできません。キャッシュされたコンテンツは、オブジェクトコンテンツが更新されているかどうかを確認するために、サーバーで検証する必要があります。オブジェクトコンテンツが更新されると、キャッシュされたコンテンツは期限切れになり、オブジェクトはサーバーから再度ダウンロードされます。オブジェクトコンテンツが更新されていない場合、キャッシュは期限切れにならず、オブジェクトはキャッシュから直接使用できます。

  • no-store: オブジェクトのすべてのコンテンツはキャッシュされません。

  • public: オブジェクトのすべてのコンテンツはキャッシュされます。

  • private: オブジェクトのすべてのコンテンツは、クライアントのみにキャッシュされます。

  • max-age=<seconds>: キャッシュされたコンテンツの有効期間。単位: 秒。このオプションは、HTTP 1.1 でのみ使用できます。

Expires

UTC でのキャッシュの有効期限。例: 2022-10-12T00:00:00.000Zmax-age=<seconds> が Cache-Control ヘッダー設定に含まれている場合、max-age=<seconds> は Expires の値よりも優先されます。

Last-Modified

オブジェクトが最後に変更された時刻。Last-Modified ヘッダーは、キャッシュ制御、同期、およびデータ管理のために OSS によって自動的に更新されます。このヘッダーの値は UTC であり、手動で変更することはできません。詳細については、「OSS オブジェクトの LastModified 属性に影響を与える操作は何ですか?」をご参照ください。

説明

OSS コンソールに表示されるオブジェクトの更新時刻は、時刻表示を統一するために UTC 時刻から変換されたローカル時刻です。たとえば、オブジェクトが UTC の 2024 年 2 月 28 日 13:31:54 に最後に更新され、UTC + 08:00 タイムゾーンでオブジェクトを確認している場合、OSS コンソールに表示されるオブジェクトの更新時刻は、2024 年 2 月 28 日 21:31:54 です。

Content-Length

オブジェクトのサイズ。単位: バイト。

ユーザーメタデータ

オブジェクトをアップロードするときに、ユーザーメタデータを追加して、オブジェクトの目的または属性を識別できます。

  • 1 つのオブジェクトに複数のユーザーメタデータヘッダーを設定できます。ただし、オブジェクトのユーザーメタデータの合計サイズは 8 KB を超えることはできません。

  • ユーザーメタデータは、キーと値のペアのセットです。ユーザーメタデータヘッダーの名前は、x-oss-meta- で始まる必要があります。たとえば、x-oss-meta-last-modified:20210506 は、ローカルファイルが最後に変更されたのが 2021 年 5 月 6 日であることを示します。

  • GetObject オペレーションまたは HeadObject オペレーションを呼び出すと、オブジェクトのユーザーメタデータは HTTP ヘッダーとして返されます。

手順

OSS コンソールの使用

OSS コンソールを使用して、最大 100 個のオブジェクトのオブジェクトメタデータを一度に設定できます。

  1. OSS コンソール にログオンします。

  2. 左側のナビゲーションウィンドウで、バケットリスト をクリックします。[バケット] ページで、目的のバケットを見つけてクリックします。

  3. 左側のナビゲーションツリーで、オブジェクト管理 > オブジェクト を選択します。

  4. 標準 HTTP ヘッダーとユーザーメタデータを設定します。

    • 複数のオブジェクトの HTTP ヘッダーを一度に設定する

      メタデータを設定するオブジェクトを選択し、ファイルメタデータの設定 をクリックします。

    • 単一オブジェクトの HTTP ヘッダーを設定する

      オブジェクトリストでオブジェクトを見つけ、more > ファイルメタデータの設定 を選択します。

  5. OK をクリックします。

ossbrowser の使用

ossbrowser を使用して、OSS コンソールで実行できるのと同じオブジェクトレベルの操作を実行できます。 ossbrowser の画面上の指示に従って、オブジェクトメタデータを設定できます。 ossbrowser の使用方法の詳細については、「ossbrowser の使用」をご参照ください。

OSS SDK の使用

次のサンプルコードは、一般的なプログラミング言語の OSS SDK を使用してオブジェクトメタデータを設定する方法の例を示しています。他のプログラミング言語の OSS SDK を使用してオブジェクトメタデータを設定する方法の詳細については、「概要」をご参照ください。

import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.common.utils.BinaryUtil;
import com.aliyun.oss.common.utils.DateUtil;
import com.aliyun.oss.model.ObjectMetadata;
import java.io.ByteArrayInputStream;

public class Demo {
    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();
        // バケット名を指定します。例: examplebucket。
        String bucketName = "examplebucket";
        // オブジェクトのフルパスを指定します。フルパスにバケット名を含めないでください。例: testfolder/exampleobject.txt。
        String objectName = "testfolder/exampleobject.txt";
        String content = "Hello OSS";
        // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
        String region = "cn-hangzhou";

        // OSSClient インスタンスを作成します。
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
        OSS ossClient = OSSClientBuilder.create()
        .endpoint(endpoint)
        .credentialsProvider(credentialsProvider)
        .clientConfiguration(clientBuilderConfiguration)
        .region(region)               
        .build();

        try {
            // アップロードされたオブジェクトのメタデータを追加します。
            ObjectMetadata meta = new ObjectMetadata();

            String md5 = BinaryUtil.toBase64String(BinaryUtil.calculateMd5(content.getBytes()));
            // MD5 検証を有効にします。MD5 検証が有効になっていると、OSS はアップロードされたオブジェクトの MD5 ハッシュを計算し、この 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");

            // オブジェクトをアップロードします。
            ossClient.putObject(bucketName, objectName, new ByteArrayInputStream(content.getBytes()), meta);
        } catch (OSSException oe) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "but was rejected with an error response for some reason.");
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + "such as not being able to access the network.");
            System.out.println("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}               
<?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();
// バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
$endpoint = "yourEndpoint";
// バケットの名前を指定します。例: examplebucket。
$bucket= "examplebucket";
// オブジェクトのフルパスを指定します。フルパスにバケット名を含めないでください。例: exampledir/exampleobject.txt。
$object = "exampledir/exampleobject.txt";
$content = file_get_contents(__FILE__);
$options = array(
    OssClient::OSS_HEADERS => array(
        'Expires' => '2012-10-01 08:00:00',
        'Content-Disposition' => 'attachment; filename="xxxxxx"',
        'x-oss-meta-self-define-title' => 'user define meta info',
    ));
try{
    $config = array(
        "provider" => $provider,
        "endpoint" => $endpoint,
        "signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
        "region"=> "cn-hangzhou"
    );
    $ossClient = new OssClient($config);
    // オブジェクトをアップロードするときに、オブジェクトメタデータを設定します。
    $ossClient->putObject($bucket, $object, $content, $options);
} catch(OssException $e) {
    printf(__FUNCTION__ . ": FAILED\n");
    printf($e->getMessage() . "\n");
    return;
}
print(__FUNCTION__ . ": OK" . "\n");
            
const OSS = require('ali-oss');

const client = new OSS({
  // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを oss-cn-hangzhou に設定します。
  region: 'yourRegion',
  // 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  // バケットの名前を指定します。
  bucket: 'examplebucket'
});

async function put() {
  try {
    let meta = { year: 2016, people: 'mary' };
    let result = await client.put('object-name', path.normalize('D:\\localpath\\examplefile.txt'), meta);
  console.log(result);
  } catch (e) {
    console.log(e);
  }
}

put();
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider

# 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())

# バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"

# エンドポイントにマップするリージョンの ID を指定します。例: cn-hangzhou。署名アルゴリズム V4 を使用する場合は、このパラメータが必要です。
region = "cn-hangzhou"

# バケットの名前を指定します。
bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)

# オブジェクトのフルパスを指定します。例: exampledir/exampleobject.txt。フルパスにバケット名を含めないでください。
object_name = 'exampledir/exampleobject.txt'
# アップロードする文字列を指定します。
content = '{"age": 1}'
# HTTP ヘッダーを設定します。たとえば、Content-Type ヘッダーを 'application/json; charset=utf-8' に設定します。
bucket.put_object(object_name, content, headers={'Content-Type': 'application/json; charset=utf-8'})
using Aliyun.OSS;
using Aliyun.OSS.Common;
using Aliyun.OSS.Util;

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

// ClientConfiguration インスタンスを作成し、要件に基づいてデフォルトパラメータを変更します。
var conf = new ClientConfiguration();

// 署名アルゴリズム V4 を使用します。
conf.SignatureVersion = SignatureVersion.V4;

// OSSClient インスタンスを作成します。
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
client.SetRegion(region);
try
{
    using (var fs = File.Open(localFilename, FileMode.Open))
    {
        // オブジェクトのメタデータを作成します。オブジェクトの HTTP ヘッダーを設定できます。
        var metadata = new ObjectMetadata()
        {
            // オブジェクトのコンテンツタイプを指定します。
            ContentType = "text/html",
            // UTC でのキャッシュの有効期限を指定します。
            ExpirationTime = DateTime.Parse("2025-10-12T00:00:00.000Z"),
        };
        // アップロードするオブジェクトコンテンツの長さを指定します。実際のオブジェクトの長さが指定された長さよりも長い場合、オブジェクトは切り詰められます。指定された長さのコンテンツのみがアップロードされます。実際のオブジェクトの長さが指定された長さよりも短い場合は、オブジェクトのすべてのコンテンツがアップロードされます。
        metadata.ContentLength = fs.Length;
        // オブジェクトがダウンロードされるときの Web ページのキャッシュ動作を指定します。
        metadata.CacheControl = "No-Cache";
        // mykey1 を myval1 に設定します。
        metadata.UserMetadata.Add("mykey1", "myval1");
        // mykey2 を myval2 に設定します。
        metadata.UserMetadata.Add("mykey2", "myval2");
        var saveAsFilename = "Filetest123.txt";
        var contentDisposition = string.Format("attachment;filename*=utf-8''{0}", HttpUtils.EncodeUri(saveAsFilename, "utf-8"));
        // 必要なコンテンツがオブジェクトとして保存されるときのデフォルトのオブジェクト名を指定します。
        metadata.ContentDisposition = contentDisposition;
        // オブジェクトをアップロードし、オブジェクトメタデータを設定します。
        client.PutObject(bucketName, objectName, fs, metadata);
        Console.WriteLine("Put object succeeded");
        // オブジェクトメタデータをクエリします。
        var oldMeta = client.GetObjectMetadata(bucketName, objectName);
        // 新しいオブジェクトメタデータを設定します。
        var newMeta = new ObjectMetadata()
        {
            ContentType = "application/octet-stream",
            ExpirationTime = DateTime.Parse("2035-11-11T00:00:00.000Z"),
            // オブジェクトがダウンロードされるときのオブジェクトのコンテンツエンコード形式を指定します。
            ContentEncoding = null,
            CacheControl = ""
        };
        // ユーザーメタデータを設定します。
        newMeta.UserMetadata.Add("author", "oss");
        newMeta.UserMetadata.Add("flag", "my-flag");
        newMeta.UserMetadata.Add("mykey2", "myval2-modified-value");
        // ModifyObjectMeta メソッドを使用して、オブジェクトメタデータを変更します。
        client.ModifyObjectMeta(bucketName, objectName, newMeta);
    }
}
catch (Exception ex)
{
    Console.WriteLine("Put object failed, {0}", ex.Message);
}
// オブジェクトメタデータを同期的にクエリするリクエストを作成します。
// バケット名とオブジェクトのフルパスを指定します。この例では、バケット名は examplebucket で、オブジェクトのフルパスは exampledir/exampleobject.txt です。オブジェクトのフルパスにバケット名を含めないでください。
HeadObjectRequest head = new HeadObjectRequest("examplebucket", "exampledir/exampleobject.txt");

// オブジェクトメタデータをクエリします。
OSSAsyncTask task = oss.asyncHeadObject(head, new OSSCompletedCallback<HeadObjectRequest, HeadObjectResult>() {
    @Override
    public void onSuccess(HeadObjectRequest request, HeadObjectResult result) {
    
    // オブジェクトの長さを取得します。
        Log.d("headObject", "object Size: " + result.getMetadata().getContentLength()); 
    // オブジェクトのタイプをクエリします。
        Log.d("headObject", "object Content Type: " + result.getMetadata().getContentType()); 
    }

    @Override
    public void onFailure(HeadObjectRequest request, ClientException clientExcepion, ServiceException serviceException) {
        // リクエスト例外を処理します。
        if (clientExcepion != null) {
            // ネットワーク例外などのクライアント例外を処理します。
            clientExcepion.printStackTrace();
        }
        if (serviceException != null) {
            // サービス例外を処理します。
            Log.e("ErrorCode", serviceException.getErrorCode());
            Log.e("RequestId", serviceException.getRequestId());
            Log.e("HostId", serviceException.getHostId());
            Log.e("RawMessage", serviceException.getRawMessage());
        }
    }
});

// task.waitUntilFinished(); // オブジェクトメタデータがクエリされるまで待ちます。
OSSHeadObjectRequest * request = [OSSHeadObjectRequest new];
// バケット名を指定します。例: examplebucket。
request.bucketName = @"examplebucket";
// オブジェクトのフルパスを指定します。フルパスにバケット名を含めないでください。例: exampledir/exampleobject.txt。
request.objectKey = @"exampledir/exampleobject.txt";

OSSTask * headTask = [client headObject:request];

[headTask continueWithBlock:^id(OSSTask *task) {
    if (!task.error) {
        NSLog(@"head object success!");
        OSSHeadObjectResult * result = task.result;
        NSLog(@"header fields: %@", result.httpResponseHeaderFields);
        for (NSString * key in result.objectMeta) {
            NSLog(@"ObjectMeta: %@ - %@", key, [result.objectMeta objectForKey:key]);
        }
    } else {
        NSLog(@"head object failed, error: %@" ,task.error);
    }
    return nil;
}];
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;

int main(void)
{

    /* OSS へのアクセスに使用するアカウントに関する情報を初期化します。*/

    /* バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。*/
    std::string Endpoint = "yourEndpoint";
    /* バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。*/
    std::string Region = "yourRegion";
    /* バケットの名前を指定します。例: examplebucket。*/
    std::string BucketName = "examplebucket";
    /* オブジェクトのフルパスを指定します。オブジェクトのフルパスにバケット名を含めないでください。例: exampledir/exampleobject.txt。*/
    std::string ObjectName = "exampledir/exampleobject.txt";

    /* ネットワークリソースなどのリソースを初期化します。*/
    InitializeSdk();

    ClientConfiguration conf;
    conf.signatureVersion = SignatureVersionType::V4;
    /* 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。*/
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClient client(Endpoint, credentialsProvider, conf);
    client.SetRegion(Region);

    /* HTTP ヘッダーを設定します。*/
    auto meta = ObjectMetaData();
    meta.setContentType("text/plain");
    meta.setCacheControl("max-age=3");
    /* オブジェクトのユーザーメタデータを設定します。*/
    meta.UserMetaData()["meta"] = "meta-value";

    std::shared_ptr<std::iostream> content = std::make_shared<std::stringstream>();
    *content << "Thank you for using Aliyun Object Storage Service!";
    auto outcome = client.PutObject(BucketName, ObjectName, content, meta);

    if (!outcome.isSuccess()) {
        /* 例外を処理します。*/
        std::cout << "PutObject fail" <<
        ",code:" << outcome.error().Code() <<
        ",message:" << outcome.error().Message() <<
        ",requestId:" << outcome.error().RequestId() << std::endl;
        return -1;
    }

    /* ネットワークリソースなどのリソースを解放します。*/
    ShutdownSdk();
    return 0;
}
#include "oss_api.h"
#include "aos_http_io.h"
/* バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。*/
const char *endpoint = "yourEndpoint";
/* バケットの名前を指定します。例: examplebucket。*/
const char *bucket_name = "examplebucket";
/* オブジェクトのフルパスを指定します。オブジェクトのフルパスにバケット名を含めないでください。例: exampledir/exampleobject.txt。*/
const char *object_name = "exampledir/exampleobject.txt";
const char *object_content= "hello world";
/* バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。*/
const char *region = "yourRegion";
void init_options(oss_request_options_t *options)
{
    options->config = oss_config_create(options->pool);
    /* char* 文字列を使用して aos_string_t を初期化します。*/
    aos_str_set(&options->config->endpoint, endpoint);
    /* 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。*/
    aos_str_set(&options->config->access_key_id, getenv("OSS_ACCESS_KEY_ID"));
    aos_str_set(&options->config->access_key_secret, getenv("OSS_ACCESS_KEY_SECRET"));
    // 2 つの追加パラメータを指定します。
    aos_str_set(&options->config->region, region);
    options->config->signature_version = 4;
    /* CNAME を使用するかどうかを指定します。値 0 は、CNAME が使用されていないことを示します。*/
    options->config->is_cname = 0;
    /* タイムアウト期間などのネットワークパラメータを指定します。*/
    options->ctl = aos_http_controller_create(options->pool, 0);
}
int main(int argc, char *argv[])
{
    /* main() で aos_http_io_initialize メソッドを呼び出して、ネットワークリソースやメモリリソースなどのグローバルリソースを初期化します。*/
    if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
        exit(1);
    }
    /* メモリを管理するためのメモリプールを作成します。 aos_pool_t は apr_pool_t と同等です。メモリプールを作成するために使用されるコードは、APR ライブラリに含まれています。*/
    aos_pool_t *pool;
    /* メモリプールを作成します。2 番目のパラメータの値は NULL です。この値は、プールが他のメモリプールを継承しないことを指定します。*/
    aos_pool_create(&pool, NULL);
    /* オプションを作成して初期化します。このパラメータは、endpoint、access_key_id、access_key_secret、is_cname、curl などのグローバル設定情報を指定します。*/
    oss_request_options_t *oss_client_options;
    /* メモリプールのメモリリソースをオプションに割り当てます。*/
    oss_client_options = oss_request_options_create(pool);
    /* oss_client_options を初期化します。*/
    init_options(oss_client_options);
    /* パラメータを初期化します。*/
    aos_string_t bucket;
    aos_string_t object;
    aos_table_t *headers;
    aos_list_t buffer;
    aos_table_t *resp_headers = NULL; 
    aos_status_t *resp_status = NULL; 
    aos_buf_t *content = NULL;
    char *content_length_str = NULL;
    char *object_type = NULL;
    char *object_author = NULL;
    int64_t content_length = 0;
    aos_str_set(&bucket, bucket_name);
    aos_str_set(&object, object_name);
    headers = aos_table_make(pool, 2);
    /* ユーザーメタデータを設定します。*/
    apr_table_set(headers, "Expires", "Fri, 28 Feb 2032 05:38:42 GMT"); 
    apr_table_set(headers, "x-oss-meta-author", "oss");
    aos_list_init(&buffer);
    content = aos_buf_pack(oss_client_options->pool, object_content, strlen(object_content));
    aos_list_add_tail(&content->node, &buffer);
    /* キャッシュからオブジェクトをアップロードします。*/
    resp_status = oss_put_object_from_buffer(oss_client_options, &bucket, &object, 
               &buffer, headers, &resp_headers);
    if (aos_status_is_ok(resp_status)) {
        printf("put object from buffer with md5 succeeded\n");
    } else {
        printf("put object from buffer with md5 failed\n");
    }
    /* オブジェクトメタデータをクエリします。*/
    resp_status = oss_get_object_meta(oss_client_options, &bucket, &object, &resp_headers);
    if (aos_status_is_ok(resp_status)) {
        content_length_str = (char*)apr_table_get(resp_headers, OSS_CONTENT_LENGTH);
        if (content_length_str != NULL) {
            content_length = atol(content_length_str);
        }
        object_author = (char*)apr_table_get(resp_headers, OSS_AUTHORIZATION);
        object_type = (char*)apr_table_get(resp_headers, OSS_OBJECT_TYPE);
        printf("get object meta succeeded, object author:%s, object type:%s, content_length:%ld\n", object_author, object_type, content_length);
    } else {
        printf("req:%s, get object meta failed\n", resp_status->req_id);
    }
    /* メモリプールを解放します。この操作により、リクエストに割り当てられたメモリリソースが解放されます。*/
    aos_pool_destroy(pool);
    /* 割り当てられたグローバルリソースを解放します。*/
    aos_http_io_deinitialize();
    return 0;
}
require 'aliyun/oss'
client = Aliyun::OSS::Client.new(
  # バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
  endpoint: 'https://oss-cn-hangzhou.aliyuncs.com',
  # 環境変数からアクセス認証情報を取得します。コードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
  access_key_id: ENV['OSS_ACCESS_KEY_ID'],
  access_key_secret: ENV['OSS_ACCESS_KEY_SECRET']
)

# バケットの名前を指定します。例: examplebucket。
bucket = client.get_bucket('examplebucket')

# シンプルアップロード中にオブジェクトメタデータを設定します。
bucket.put_object(
  'my-object-1',
  :file => 'local-file',
  :metas => {'year' => '2016', 'people' => 'mary'})

# 追加アップロード中にオブジェクトメタデータを設定します。
bucket.append_object(
  'my-object-2', 0,
  :file => 'local-file',
  :metas => {'year' => '2016', 'people' => 'mary'})

# 再開可能なアップロード中にオブジェクトメタデータを設定します。
bucket.resumable_upload(
  'my-object',
  'local-file',
  :metas => {'year' => '2016', 'people' => 'mary'})          
package main

import (
	"context"
	"flag"
	"log"
	"strings"
	"time"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

// グローバル変数を定義します。
var (
	region     string // バケットが配置されているリージョン。
	bucketName string // バケットの名前。
	objectName string // オブジェクトの名前。
)

// コマンドラインパラメータを初期化するために使用される init 関数を指定します。
func init() {
	flag.StringVar(&region, "region", "", "バケットが配置されているリージョン。")
	flag.StringVar(&bucketName, "bucket", "", "バケットの名前。")
	flag.StringVar(&objectName, "object", "", "オブジェクトの名前。")
}

func main() {
	// コマンドラインパラメータを解析します。
	flag.Parse()

	// バケットの名前が指定されているかどうかを確認します。
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, bucket name required")
	}

	// リージョンが指定されているかどうかを確認します。
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, region required")
	}

	// オブジェクトの名前が指定されているかどうかを確認します。
	if len(objectName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, object name required")
	}

	// アップロードするコンテンツを指定します。
	content := "hi oss"

	// デフォルトの設定を読み込み、認証情報プロバイダとリージョンを指定します。
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// OSS クライアントを作成します。
	client := oss.NewClient(cfg)

	// オブジェクトをアップロードするリクエストを作成します。
	request := &oss.PutObjectRequest{
		Bucket:  oss.Ptr(bucketName),                                                          // バケットの名前。
		Key:     oss.Ptr(objectName),                                                          // オブジェクトの名前。
		Body:    strings.NewReader(content),                                                   // アップロードされるコンテンツ。
		Expires: oss.Ptr(time.Date(2038, 12, 31, 12, 0, 0, 0, time.UTC).Format(time.RFC1123)), // オブジェクトの有効期限。
		Acl:     oss.ObjectACLPublicRead,
		Metadata: map[string]string{ // カスタムメタデータ。
			"Author": "alibaba oss sdk", // オブジェクトの作成者。
			"Date":   "2024-07-01",      // オブジェクトの作成日。
		},
	}

	// アップロードリクエストを実行します。
	result, err := client.PutObject(context.TODO(), request)
	if err != nil {
		log.Fatalf("failed to put object %v", err)
	}

	// 結果をログに記録します。
	log.Printf("put object result:%#v\n", result)
}

ossutil の使用

ossutil を使用して、オブジェクトメタデータを設定できます。詳細については、「set-meta (オブジェクトメタデータの管理)」をご参照ください。

OSS API の使用

ビジネスで高度なカスタマイズが必要な場合は、RESTful API を直接呼び出すことができます。API を直接呼び出すには、コードに署名計算を含める必要があります。詳細については、「PutObject」をご参照ください。