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

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

最終更新日:Aug 14, 2026

オブジェクトメタデータには、標準 HTTP ヘッダーとユーザーメタデータが含まれます。HTTP ヘッダーを設定して、キャッシュ、コンテンツタイプ、ダウンロード動作を制御します。ユーザーメタデータを追加して、カスタムのキーと値のペアでオブジェクトにタグを付けます。

標準 HTTP ヘッダー

OSS は、アップロードされた各オブジェクトに対して、以下の標準 HTTP ヘッダーを格納します。

標準 HTTP ヘッダー

説明

Content-Type

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

Content-Encoding

オブジェクトに適用されるエンコーディング方法です。実際のエンコーディングと一致するように、このヘッダーを設定します。不一致の場合、ブラウザがオブジェクトの解析またはダウンロードに失敗することがあります。オブジェクトがエンコードされていない場合は、空のままにします。有効な値は次のとおりです。

  • identity (デフォルト) :圧縮もエンコーディングも行いません。

  • gzip:LZ77 アルゴリズムと 32 ビット CRC でエンコードされます。

  • compress:LZW アルゴリズムでエンコードされます。

  • deflate:zlib と deflate アルゴリズムでエンコードされます。

  • br: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*.jpg は example_.jpg のようにエスケープされることがあります。

  • 非 ASCII 文字のファイル名が文字化けするのを防ぐには、URL エンコードしてください。たとえば、测试.txt オブジェクトを元の名前 测试.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("测试","UTF-8")+".txt;filename*=UTF-8''"+URLEncoder.encode("测试","UTF-8")+".txt" から生成されます。

オブジェクトがプレビューされるか、添付ファイルとしてダウンロードされるかは、バケットの作成時間、OSS の利用開始日時、およびドメイン名の種類によって異なります。詳細については、「URL を使用して画像オブジェクトにアクセスしたときに、画像オブジェクトが添付ファイルとしてダウンロードされ、プレビューできない場合の対処方法」をご参照ください。

Cache-Control

説明

Cache-Control が設定されていない場合、OSS はレスポンスヘッダーからこのフィールドを省略します。ブラウザは独自のデフォルトのキャッシュポリシーを適用します。

オブジェクトのキャッシュ動作を制御します。有効な値は次のとおりです。

  • no-cache:キャッシュは、提供する前にオリジンサーバーで再検証する必要があります。

  • no-store:オブジェクトのキャッシュを行いません。

  • public:オブジェクトはどのキャッシュでもキャッシュできます。

  • private:オブジェクトはクライアント上でのみキャッシュされます。

  • max-age=<seconds>:キャッシュ有効期間 (秒) 。 HTTP 1.1 でのみ使用可能です。

Expires

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

Last-Modified

オブジェクトの最終更新日時 (UTC) 。Last-Modified ヘッダーは OSS によって自動的に更新され、手動で変更することはできません。詳細については、「OSS オブジェクトの LastModified 属性に影響を与える操作」をご参照ください。

説明

OSS コンソールでは、UTC がローカルタイムゾーンに変換されます。たとえば、2024 年 2 月 28 日 13:31:54 (UTC) に最終更新されたオブジェクトは、UTC+8 タイムゾーンでは 21:31:54 と表示されます。

Content-Length

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

ユーザーメタデータ

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

  • オブジェクトは複数のユーザーメタデータヘッダーをサポートし、合計で最大 8 KB です。

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

  • GetObject API および HeadObject API は、ユーザーメタデータを HTTP ヘッダーとして返します。

操作手順

OSS コンソールを使用

OSS コンソールは、一度に最大 100 個のオブジェクトのメタデータ設定をサポートします。

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

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

  3. 左側のナビゲーションツリーで、オブジェクト管理>オブジェクト.

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

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

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

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

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

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

  6. OSS は、バケットレベルでのデフォルトの Cache-Control 継承をサポートしていません。バケットに統一された Cache-Control 値を設定し、後からアップロードされるオブジェクトにその値を自動的に継承させることはできません。既存のオブジェクトの Cache-Control ヘッダーを一括で設定するには、ossutil を使用することもできます。

    ossutil set-props oss://bucketname/prefix -r -f --cache-control max-age=86400

    詳細については、「set-props (オブジェクトプロパティの設定)」をご参照ください。

    ossbrowser での一般的な操作

ossbrowser を使用

ossbrowser は、OSS コンソールと同じオブジェクトレベルの操作をサポートしています。詳細については、「一般的な操作」をご参照ください。

OSS SDK を使用

以下のコードは、OSS SDK を使用してオブジェクトメタデータを設定する方法を示しています。他の言語の SDK については、「概要」をご参照ください。

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
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 インスタンスを作成します。
        // 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 検証を有効にします。この機能を有効にすると、OSS はアップロードされたオブジェクトの MD5 ハッシュと指定された MD5 ハッシュを比較します。2つのハッシュ値が異なる場合、例外がスローされます。
            meta.setContentMD5(md5);
            // アップロードするオブジェクトのコンテンツタイプを指定します。コンテンツタイプによって、ブラウザがオブジェクトを読み取る方法が決まります。このパラメーターを指定しない場合、コンテンツタイプはオブジェクトのファイル拡張子に基づいて生成されます。オブジェクトにファイル拡張子がない場合、デフォルト値の application/octet-stream が使用されます。
            meta.setContentType("text/plain; charset=utf-8");
            // ヘッダーを設定します。たとえば、アップロードされたオブジェクトのストレージクラスを設定します。
            meta.setHeader("x-oss-storage-class", StorageClass.Standard);
            
            // 必要に応じて、次の行のコメントを解除します。
            
            // ダウンロード時のオブジェクト名を設定します。
            // meta.setContentDisposition("attachment; filename=\"DownloadFilename\"");
            // アップロードするオブジェクトの長さを設定します。オブジェクトがこの長さより大きい場合は切り捨てられます。オブジェクトが小さい場合は、実際の長さが使用されます。
            // meta.setContentLength(content.length());
            // オブジェクトのダウンロード時の Web ページのキャッシュ動作を設定します。
            // meta.setCacheControl("Download Action");
            // キャッシュの有効期限を設定します。時刻は GMT 形式である必要があります。
            // meta.setExpirationTime(DateUtil.parseIso8601Date("2022-10-12T00:00:00.000Z"));
            // ダウンロード時のオブジェクトのエンコード形式を設定します。
            // meta.setContentEncoding("gzip");

            // オブジェクトをアップロードします。
            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();
// yourEndpoint を、バケットが配置されているリージョンのエンドポイントに置き換えます。たとえば、中国 (杭州) リージョンの場合、エンドポイントを 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-defined 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 path = require('path');

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

async function put() {
  try {
    // options オブジェクトの meta プロパティとしてメタデータを設定します。
    let result = await client.put('object-name', path.normalize('D:\\localpath\\examplefile.txt'), {
      meta: {
        year: '2025',  // メタデータの値は文字列である必要があります。
        people: 'mary'
      }
    });
  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;

// バケットが配置されているリージョンのエンドポイントに yourEndpoint を設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを 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();

// 署名バージョン4を使用します。
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",
            // キャッシュの有効期限を設定します。フォーマットはグリニッジ標準時 (GMT) です。
            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 = "file-name-test-123.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 アカウント情報を初期化します。*/
    
    /* yourEndpoint を、バケットが配置されているリージョンのエンドポイントに設定します。たとえば、中国 (杭州) リージョンの場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。*/
    std::string Endpoint = "yourEndpoint";
    /* yourRegion を、バケットが配置されているリージョンに設定します。たとえば、中国 (杭州) リージョンの場合、リージョンを 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 Alibaba Cloud 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"
/* yourEndpoint を、バケットが配置されているリージョンのエンドポイントに設定します。たとえば、中国 (杭州) リージョンの場合、エンドポイントを 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";
/* yourRegion を、バケットが配置されているリージョンに設定します。たとえば、中国 (杭州) リージョンの場合、リージョンを cn-hangzhou に設定します。 */
const char *region = "yourRegion";
void init_options(oss_request_options_t *options)
{
    options->config = oss_config_create(options->pool);
    /* aos_string_t 型を char* 文字列で初期化します。 */
    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[])
{
    /* プログラムのエントリポイントで aos_http_io_initialize メソッドを呼び出し、ネットワークやメモリなどのグローバルリソースを初期化します。 */
    if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
        exit(1);
    }
    /* メモリ管理用のメモリプールは 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", "", "The region in which the bucket is located.")
	flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
	flag.StringVar(&objectName, "object", "", "The name of the 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 を使用

OSS RESTful API を直接呼び出すには、コードに署名計算を含める必要があります。詳細については、「PutObject」をご参照ください。