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

Object Storage Service:コールバックのアップロード

最終更新日:Feb 23, 2024

オブジェクトがアップロードされると、object Storage Service (OSS) はアプリケーションサーバーのコールバックプロセスを開始できます。 アップロードコールバックを設定するには、必要なコールバックパラメーターをOSSに送信されるアップロードリクエストに追加するだけです。

シナリオ

アップロードコールバックの一般的なシナリオは、サードパーティのアップロードを承認することです。 アップロードコールバックを使用すると、クライアントロジックを簡素化し、ネットワークリソースを節約できます。 次の図は、アップロードコールバックの仕組みを示しています。

image
  1. クライアントは、クライアントからOSSに送信されるアップロードリクエストでアップロードコールバックを指定します。

  2. アップロードタスクが完了すると、OSSはアップロードコールバックのHTTPリクエストをアプリケーションサーバーに送信します。 callbackUrlは、アプリケーションサーバーのパブリックURLです。

  3. アプリケーションサーバは、アップロード完了を通知する要求を受信する。 その後、アプリケーションサーバーはデータベースの変更などの操作を実行し、OSSから送信された要求に応答します。

  4. OSSがレスポンスを受信すると、アップロード結果がクライアントに返されます。

OSSがアプリケーションサーバーにPOSTコールバックリクエストを送信すると、OSSはPOSTリクエスト本文に特定の情報を運ぶパラメーターを含めます。

パラメータは、2つのカテゴリに分類される。すなわち、バケット名およびオブジェクト名を指定するために使用されるパラメータなどのシステム定義パラメータと、要求者のIDなどのアプリケーションロジックに関連するいくつかの情報を搬送するために使用されるカスタムパラメータである。

使用上の注意

単純アップロード (PutObject) 、フォームアップロード (PostObject) 、およびマルチパートアップロード (CompleteMultipartUpload) のみがアップロードコールバックをサポートしています。

手順

OSS SDKの使用

次のサンプルコードは、一般的なプログラミング言語でOSS SDKを使用してアップロードコールバックを実行する方法の例を示しています。 他のプログラミング言語でOSS SDKを使用してアップロードコールバックを実行する方法の詳細については、「概要」をご参照ください。

システムを使用した

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をインポートします。*;
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();
        // バケットの名前を指定します。 例: examplebucket. 
        String bucketName = "examplebucket";
        // オブジェクトのフルパスを指定します。 例: exampledir/exampleobject.txt。 バケット名をフルパスに含めないでください。 
        文字列objectName = "exampledir/exampleobject.txt";
        // コールバック要求の送信先のサーバーのアドレスを指定します。 例: https://example.com:23450。 
        文字列callbackUrl = "yourCallbackServerUrl";

        // Create an OSSClient instance. 
        OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);
        try {
            String content = "Hello OSS";
            PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName,new ByteArrayInputStream(content.getBytes()));

            // アップロードコールバックパラメータを指定します。 
            Callback callback = new Callback();
            callback.setCallbackUrl(callbackUrl);
            // (オプション) コールバックリクエストヘッダーのCallbackHostフィールドを指定します。 
            // callback.setCallbackHost("yourCallbackHost");
            // コールバック要求のcallbackBodyフィールドを指定します。 
            callback.setCallbackBody("{\\\"mimeType\\\":${mimeType},\\\"size\\\":${size}}");
            // コールバック要求のContent-Typeフィールドを指定します。 
            callback.setCalbackBodyType(Callback.CalbackBodyType.JSON);
            // コールバック要求のカスタムパラメータを指定します。 Each custom parameter consists of a key and a value. The key must start with x:. 
            callback.addCallbackVar("x:var1", "value1");
            callback.addCallbackVar("x:var2", "value2");
            putObjectRequest.setCallback(callback);

            PutObjectResult putObjectResult = ossClient.putObject(putObjectRequest);

            // アップロードコールバック要求に対する応答を読み取ります。 
            byte[] buffer = new byte[1024];
            putObjectResult.getResponse().getContent().read (バッファ);
            // データの読み取り後、取得したストリームを閉じる必要があります。 そうしないと、接続リークが発生する可能性があります。 Consequently, no connections are available and an exception occurs. 
            putObjectResult.getResponse().getContent().close();
        } 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 (投げられるce) {
            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();
            }
        }
    }
} 
<?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\OssClientを使用します。// 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数を指定していることを確認してください。  
$accessKeyId = getenv("OSS_ACCESS_KEY_ID");
$accessKeySecret = getenv("OSS_ACCESS_KEY_SECRET");
// バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 
$end point = "yourEndpoint";
// バケットの名前を指定します。 例: examplebucket. 
$bucket= "examplebucket";
// オブジェクトのフルパスを指定します。 例: exampledir/exampleobject.txt。 バケット名をフルパスに含めないでください。 
$object = "exampledir/exampleobject.txt";

$ossClient = new OssClient($accessKeyId, $accessKeySecret, $end point);

// オブジェクトをアップロードするときにコールバックを設定します。 
// callbackUrlは、コールバック要求を受信するコールバックサーバーのアドレスを指定します。 例: https://oss-demo.aliyuncs.com:23450。 
// (オプション) callbackHostをコールバックリクエストヘッダーに含まれるHostフィールドの値に設定します。 
$url =
    '{
        "callbackUrl":"yourCallbackServerUrl" 、
        "callbackHost":"yourCallbackServerHost" 、
        "callbackBody":"bucket=${bucket}&object=${object}&etag=${etag}&size=${size}&mimeType=${mimeType}&imageInfo.height=${imageInfo.height}&imageInfo.width=${imageInfo.width}&imageInfo.format=${imageInfo.format}&my_var1=${x:var1}&my_var2=${x:var2}",
        "callbackBodyType":"application/x-www-form-urlencoded"
    } ';

// コールバック要求のカスタムパラメータを指定します。 Each custom parameter consists of a key and a value. The key must start with x:. 
$var =
    '{
        "x:var1":"value1",
        "x:var2":"value2"
    } ';
$options = array(OssClient::OSS_CALLBACK => $url、
    OssClient::OSS_CALLBACK_VAR => $var
);
$result = $ossClient->putObject($bucket, $object, file_get_contents(__FILE__), $options);
print_r($result['body']);
print_r($result['info']['http_code']); 
const OSS = require('ali-OSS ');
varpath=require('path');

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'
});

const options = {
  callback: {
    // コールバック要求を受信するコールバックサーバーのアドレスを指定します。 例: http://oss-demo.aliyuncs.com:23450。 
    url: 'http:// oss-demo.aliyuncs.com:23450 '、
    // (オプション) コールバックリクエストヘッダーに含まれるHostフィールドを指定します。 
    // host: 'yourCallbackHost' 、
    // コールバック要求の本文を指定します。 
    body: 'bucket =${ bucket}&object =${ object}&var1 =${ x:var1}&var2 =${ x:var2}'、
    // コールバック要求でContent-Typeを指定します。 
    contentType: 'application/x-www-form-urlencodd' 、
    // コールバック要求のカスタムパラメータを設定します。 
    customValue: {
      var1: 'value1' 、
      var2: 'value2'
    }
  }
}

async関数put () {
  try {
    // オブジェクトとローカルファイルのフルパスを指定します。 オブジェクトのフルパスにバケット名を含めないでください。 
    // デフォルトでは、ローカルファイルのパスを指定しないと、サンプルプログラムが属するプロジェクトのローカルパスからファイルがアップロードされます。 
    let result = await client.put('exampleobject.txt '、path.normalize('/localpath/examplefile.txt ') 、オプション);
    console.log (結果);
  } catch (e) {
    console.log(e);
  }
}

put();
# -*- coding: utf-8 -*-
jsonのインポート
インポートbase64
oss2のインポート
oss2.credentialsからEnvironmentVariableCredentialsProviderをインポート

# 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 
# バケットの名前を指定します。 
bucket = oss2.Bucket(auth, 'https:// oss-cn-hangzhou.aliyuncs.com ', 'examplebucket')

# Base64でコールバックパラメーターをエンコードするために使用される関数を指定します。 
def encode_callback(callback_params):
    cb_str = json.dumps(callback_params).strip()
    retur n oss2.com pat.to_string(base64.b64encode(oss2.compat.to_bytes(cb_str)))

# アップロードコールバックパラメータを指定します。 
callback_params = {}
# コールバック要求を受信したコールバックサーバのアドレスを指定します。 例: http://oss-demo.aliyuncs.com:23450。 
callback_params['callbackUrl'] = 'http:// oss-demo.aliyuncs.com:23450'
# (オプション) コールバック要求ヘッダーに含まれるHostフィールドを指定します。 
# callback_params['callbackHost'] = 'yourCallbackHost'
# コールバック要求に含まれるbodyフィールドを指定します。 
callback_params['callbackBody'] = 'bucket =${ bucket}&object =${ object}'
# コールバックリクエストでContent-Typeを指定します。 
callback_params['callbackBodyType'] = 'application/x-www-form-urlencodd'
encoded_callback = encode_callback(callback_params)
# コールバック要求のカスタムパラメーターを設定します。 Each custom parameter consists of a key and a value. The key must start with x:. 
callback_var_params = {'x:my_var1 ': 'my_val1', 'x:my_var2': 'my_val2'}
encoded_callback_var = encode_callback(callback_var_params)

# アップロードコールバックパラメータを指定します。 
params = {'x-oss-callback': encoded_callback, 'x-oss-callback-var': encoded_callback_var}
# オブジェクトのフルパスとアップロードする文字列を指定します。 オブジェクトのフルパスにバケット名を含めないでください。 
result = bucket.put_object('examplefiles/exampleobject.txt ', 'a' * 1024*1024, params) 
;
System.IOを使用する。System.Textを使用する。Aliyun.OSSを使用します。Aliyun.OSS.Common; を使用
Aliyun.OSS.Utilを使用します。名前空間コールバック
{
    class Program
    {
        static void Main(string[] args)
        {
            Program.PutObjectCallback();
            Console.ReadKey();
        }
        public static void PutObjectCallback()
        {
            // 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 
            var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
            var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
            // バケットの名前を指定します。 例: examplebucket. 
            var bucketName = "examplebucket";
            // オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 例: exampledir/exampleobject.txt。 
            var objectName = "exampledir/exampleobject.txt";
           // アップロードするローカルファイルのフルパスを指定します。 例: D :\\ localpath\\examplefile.txt。 デフォルトでは、ローカルファイルのパスを指定しない場合、サンプルプログラムが属するプロジェクトのローカルパスからファイルがアップロードされます。 
            var localFilename = "D :\\ localpath\\examplefile.txt";
            // コールバックサーバーのURLを指定します。 例: https://example.com:23450。 
            const文字列callbackUrl = "yourCallbackServerUrl";
            // コールバック要求に含まれるcallbackBodyフィールドを指定します。 
            const string callbackBody = "bucket=${bucket}&object=${object}&etag=${etag}&size=${size}&mimeType=${mimeType}&" +
                                        "my_var1=${x:var1}&my_var2=${x:var2}";
            // Create an OSSClient instance. 
            var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
            try
            {
                string responseContent = "";
                var metadata = BuildCallbackMetadata(callbackUrl, callbackBody);
                using (var fs = File.Open(localFilename, FileMode.Open))
                {
                    var putObjectRequest = new PutObjectRequest(bucketName, objectName, fs, metadata);
                    var result = client.PutObject(putObjectRequest);
                    responseContent = GetCallbackResponse(result);
                }
                Console.WriteLine("Put object:{0} succeeded, callback response content:{1}", objectName, responseContent);
            }
            catch (OssException ex)
            {
                Console.WriteLine("Failed with error code: {0}; エラー情報: {1} 。 \nRequestID: {2}\tHostID: {3}"、
                    ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Failed with error info: {0}", ex.Message);
            }
        }
        // アップロードコールバックを設定します。 
        private static ObjectMetadata BuildCallbackMetadata(string callbackUrl, string callbackBody)
        {
            string callbackHeaderBuilder = new CallbackHeaderBuilder(callbackUrl, callbackBody) 。Build();
            string CallbackVariableHeaderBuilder = new CallbackVariableHeaderBuilder().
                AddCallbackVariable("x:var1", "x:value1").AddCallbackVariable("x:var2", "x:value2").Build();
            var metadata = new ObjectMetadata();
            metadata.AddHeader(HttpHeaders.Callback, callbackHeaderBuilder);
            metadata.AddHeader(HttpHeaders.CallbackVar, CallbackVariableHeaderBuilder);
            return metadata;
        }
        // アップロードコールバック要求に対する応答を読み取ります。 
        private static string GetCallbackResponse(PutObjectResult putObjectResult)
        {
            string callbackResponse = null;
            using (var stream = putObjectResult.ResponseStream)
            {
                var buffer = new byte[4 * 1024];
                var bytesRead = stream.Read(buffer, 0, buffer.Length);
                callbackResponse = Encoding.Default.GetString(buffer, 0, bytesRead);
            }
            return callbackResponse;
        }
    }
} 
// アップロードリクエストを作成します。 
// バケットの名前、オブジェクトのフルパス、およびローカルファイルのフルパスを指定します。 この例では、バケットの名前はexamplebucket、オブジェクトのフルパスはexampledir/exampleobject.txt、ローカルファイルのフルパスは /storage/emulated/0/oss/examplefile.txtです。 
// オブジェクトのフルパスにバケット名を含めないでください。 
PutObjectRequest put = new PutObjectRequest("examplebucket", "exampledir/exampleobject.txt", "/storage/emulated/0/oss/examplefile.txt");

put.setCallbackParam(new HashMap<String, String>() {
    {
        put("callbackUrl" 、"http://oss-demo.aliyuncs.com:23450");
        put("callbackHost", "yourCallbackHost");
        put("callbackBodyType" 、"application/json");
        put("callbackBody", "{\" mimeType\":${ mimeType },\" size\":${ size}}");
    }
});

OSSAsyncTask task = oss.asyncPutObject(put, new OSSCompletedCallback<PutObjectRequest, PutObjectResult>() {
    @オーバーライド
    public void onSuccess(PutObjectRequestリクエスト, PutObjectResult結果) {
        Log.d("PutObject", "UploadSuccess");

        // 返されたコールバック情報を取得します。 リクエストにservercallbackを指定した場合にのみ、コールバック情報を取得できます。 
        文字列serverCallbackReturnJson = result.getServerCallbackReturnBody();

        Log.d("servercallback", serverCallbackReturnJson);
    }

    @オーバーライド
    public void onFailure(PutObjectRequest request, ClientException clientExcepion, ServiceException serviceException) {
        // Handle exceptions. 
    }
});
        
OSSPutObjectRequest * request = [OSSPutObjectRequest new];
// バケットの名前を指定します。 例: examplebucket. 
request.bucketName = @ "examplebucket";
// オブジェクトのフルパスを指定します。 フルパスにバケット名を含めることはできません。 例: exampledir/exampleobject.txt。 
request.objectKey = @ "exampledir/exampleobject.txt";
request.uploadingFileURL = [NSURL fileURLWithPath :@< filepath>"];
// コールバックパラメーターを指定します。 
request.callbackParam = @{
                          @ "callbackUrl": @ "<サーバーのコールバックアドレス>" 、
                          @ "callbackBody": @ "<コールバック本体>"
                          };
// カスタム変数を指定します。 
request.callbackVar = @{
                        @ "<var1>": @ "<value1>" 、
                        @ "<var2>": @ "<value2>"
                        };
request.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) {
    NSLog(@ "% lld, % lld, % lld", bytesSent, totalByteSent, totalBytesExpectedToSend);
};
OSSTask * task = [client putObject:request];
[task continueWithBlock:^ id(OSSTask * task) {
    if (task.error) {
        OSSLogError(@ "% @" 、task.error);
    } else {
        OSSPutObjectResult * result = task.result;
        NSLog(@ "Result - requestId: %@、headerFields: %@、servercallback: % @" 、
              result.requestId、
              result.httpResponseHeaderFields,
              result.serverReturnJsonString);
    }
    nilを返します。}]; 
#include <alibabacloud/oss/OssClient.h>
名前空間listaCloud::OSSを使用します。int main(void)
{
    /* OSSへのアクセスに使用されるアカウントに関する情報を初期化します。 */
            
    /* バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 */
    std::stringエンドポイント="https://oss-cn-hangzhou.aliyuncs.com";
    /* バケットの名前を指定します。 例: examplebucket. */
    std::string BucketName = "examplebucket";
    /* オブジェクトのフルパスを指定します。 オブジェクトのフルパスにバケット名を含めないでください。 例: exampledir/exampleobject.txt。 */
    std::string ObjectName = "exampledir/exampleobject.txt";
    /* コールバックサーバーのURLを指定します。 */
    std::string ServerName = "https://example.aliyundoc.com:23450";

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

    ClientConfiguration conf;
    /* 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。 */
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClientクライアント (Endpoint, credentialsProvider, conf);
    std::shared_ptr<std::iostream> content = std::make_shared<std::stringstream>();
    * content << "Aliyun Object Storage Serviceをご利用いただきありがとうございます!";

    /* アップロードコールバックパラメータを設定します。 */
    std::string callbackBody = "bucket =${ bucket}&object =${ object}&etag =${ etag}&size =${ size}&mimeType =${ mimeType}&my_var1 =${ x:var1}";
    ObjectCallbackBuilderビルダー (ServerName、callbackBody、"" 、ObjectCallbackBuilder:: タイプ::URL);
    std::string value = builder.build();
    ObjectCallbackVariableBuilder varBuilder;
    varBuilder.addCallbackVariable("x:var1", "value1");
    std::string varValue = varBuilder.build();
    PutObjectRequestリクエスト (BucketName, ObjectName, content);
    request.MetaData().addHeader("x-oss-callback" 、値);
    request.MetaData().addHeader("x-oss-callback-var", varValue);
    auto outcome = client.PutObject (リクエスト);

    /* ネットワークリソースなどのリソースを解放します。 */
    ShutdownSdk();
    0を返します。} 
#include "oss_api.h"
# 「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 = "クラウドだけではありません。";
void init_options(oss_request_options_t * オプション)
{
    options->config = oss_config_create(options->pool);
    /* char * stringを使用して、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"));
    /* CNAMEを使用するかどうかを指定します。 値0は、CNAMEが使用されないことを示す。 */
    options->config->is_cname = 0;
    /* タイムアウト期間などのネットワークパラメーターを設定します。 */
    options->ctl = aos_http_controller_create(options->pool, 0);
}
int main(int argc, char * argv[])
{
    aos_pool_t *p = NULL;
    aos_status_t *s = NULL;
    aos_string_t bucket;
    aos_string_t object;
    aos_table_t *headers = NULL;
    oss_request_options_t *options = NULL;
    aos_table_t *resp_headers = NULL;
    aos_list_t resp_body;
    aos_list_t buffer;
    aos_buf_t *content;
    char *buf = NULL;
    int64_t len = 0;
    int64_t size = 0;
    int64_t pos = 0;
    char b64_buf[1024];
    int b64_len;
    /* コールバックパラメーターをJSON形式で指定します。 */
    /* (オプション) コールバックリクエストヘッダーに含まれるHostフィールドを指定します。 */
    char *callback =  "{"
        "\"callbackUrl\":\"http://oss-demo.aliyuncs.com:23450\","
         "\" callbackHost\":\" yourCallbackHost\","
        "\"callbackBody\":\"bucket=${bucket}&object=${object}&size=${size}&mimeType=${mimeType}\","
        "\"callbackBodyType\":\"application/x-www-form-urlencoded\""
        "}";
    /* main() でaos_http_io_initializeメソッドを呼び出して、ネットワークリソースやメモリリソースなどのグローバルリソースを初期化します。 */
    if (aos_http_io_initialize(NULL, 0))! =AOSE_OK) {
        exit(1);
    }
    /* パラメーターを初期化します。 */
    aos_pool_create(&p, NULL);
    options = oss_request_options_create(p);
    init_options(options);
    aos_str_set(&bucket, bucket_name);
    aos_str_set(&object, object_name);
    aos_list_init(&resp_body);
    aos_list_init(&buffer);
    content = aos_buf_pack(options->pool, object_content, strlen(object_content));
    aos_list_add_tail(&content->node, &buffer);
    /* ヘッダーにコールバックを追加します。 */
    b64_len = aos_base64_encode((unsigned char*)callback, strlen(callback), b64_buf);
    b64_buf[b64_len] = '\0';
    headers = aos_table_make(p, 1);
    apr_table_set(headers, OSS_CALLBACK, b64_buf);
    /* アップロードコールバックを設定します。 */
    s = oss_do_put_object_from_buffer(options, &bucket, &object, &buffer,
        headers, NULL, NULL, &resp_headers, &resp_body);
    if (aos_status_is_ok(s)) {
        printf("put object from buffer succeeded\n");
    } else {
        printf("put object from buffer failed\n");
    }
    /* バッファ長を取得します。 */
    len = aos_buf_list_len(&resp_body);
    buf = (char *)aos_pcalloc(p, (apr_size_t)(len + 1));
    buf[len] = '\0';
    /* バッファ内のコンテンツをメモリにコピーします。 */
    aos_list_for_each_entry(aos_buf_t, content, &resp_body, node) {
        size = aos_buf_size(content);
        memcpy(buf + pos, content->pos, (size_t)size);
        pos += size;
    }
    /* メモリプールを解放します。 この操作により、リクエストに割り当てられたメモリリソースが解放されます。 */
    aos_pool_destroy(p);
    /* 割り当てられたグローバルリソースを解放します。 */
    aos_http_io_deinitialize();
    0を返します。} 
'aliyun/oss' が必要です

client = Aliyun::OSS::Client.new (
  # この例では、中国 (杭州) リージョンのエンドポイントが使用されます。 実際のエンドポイントを指定します。 
  エンドポイント: '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')

callback = Aliyun::OSS::Callback.new (
  url: 'http:// oss-demo.aliyuncs.com:23450 '、
  クエリ: {user: 'put_object'} 、
  body: 'bucket =${ bucket}&object =${ object}'
)

始める
  bucket.put_object('files/hello', file: '/tmp/x', callback: callback)
rescue Aliyun::OSS::CallbackError => e
  "Callback failed: #{e.message}" を置く
終了 

OSS APIの使用

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

参考資料