Lorsque l'option de paiement par demandeur est activée pour un compartiment dans Object Storage Service (OSS), les frais de requêtes et de trafic sont facturés au demandeur plutôt qu'au propriétaire du compartiment. Ce dernier ne supporte que les frais de stockage. Vous pouvez activer cette fonctionnalité pour partager les données de votre compartiment sans avoir à payer les frais liés aux requêtes et au trafic générés par l'accès des utilisateurs.
Notes
Cette rubrique utilise le point d'extrémité public de la région Chine (Hangzhou). Si vous souhaitez accéder à OSS depuis d'autres services Alibaba Cloud situés dans la même région, utilisez un point d'extrémité interne. Pour plus d'informations sur les régions et les points d'extrémité OSS, consultez Régions et points d'extrémité.
Cette rubrique illustre la création d'une instance OSSClient avec un point d'extrémité OSS. Pour découvrir d'autres configurations, telles que l'utilisation d'un nom de domaine personnalisé ou l'authentification via des identifiants Security Token Service (STS), reportez-vous à la section Initialisation (SDK C# V1).
Pour activer le paiement par demandeur, vous devez disposer de l'autorisation
oss:PutBucketRequestPayment. Pour consulter la configuration de cette option, l'autorisationoss:GetBucketRequestPaymentest requise. Pour en savoir plus, consultez la page Accorder une politique personnalisée.
Activer le paiement par demandeur pour un compartiment
L'exemple de code suivant montre comment activer le paiement par demandeur pour un compartiment :
using Aliyun.OSS;
using Aliyun.OSS.Common;
// Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com.
var endpoint = "yourEndpoint";
// Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are set.
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// Specify the name of the bucket.
var bucketName = "examplebucket";
// Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou.
const string region = "cn-hangzhou";
// Create a ClientConfiguration instance and modify parameters as required.
var conf = new ClientConfiguration();
// Use the signature algorithm V4.
conf.SignatureVersion = SignatureVersion.V4;
// Create an OSSClient instance.
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
c.SetRegion(region);
try
{
// Enable pay-by-requester for the bucket.
var request = new SetBucketRequestPaymentRequest(bucketName, RequestPayer.Requester);
client.SetBucketRequestPayment(request);
Console.WriteLine("Set bucket:{0} RequestPayment succeeded ", bucketName);
}
catch (OssException ex)
{
Console.WriteLine("Failed with error code: {0}; Error info: {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);
}
Interroger la configuration du paiement par demandeur
Le code ci-dessous illustre la procédure pour récupérer la configuration du paiement par demandeur d'un compartiment :
using Aliyun.OSS;
using Aliyun.OSS.Common;
// Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com.
var endpoint = "yourEndpoint";
// Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// Specify the name of the bucket.
var bucketName = "examplebucket";
// Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou.
const string region = "cn-hangzhou";
// Create a ClientConfiguration instance and modify parameters as required.
var conf = new ClientConfiguration();
// Use the signature algorithm V4.
conf.SignatureVersion = SignatureVersion.V4;
// Create an OSSClient instance.
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
c.SetRegion(region);
try
{
// Query the pay-by-requester configurations of the bucket.
var result = client.GetBucketRequestPayment(bucketName);
Console.WriteLine("Set bucket:{0} RequestPayment succeeded; RequestPayment: {1}", bucketName, result.Payer);
}
catch (OssException ex)
{
Console.WriteLine("Failed with error code: {0}; Error info: {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);
}
Spécifier que les tiers sont facturés lors de l'accès aux objets
Si vous configurez le compartiment de sorte que les tiers soient facturés pour l'accès aux objets, les demandeurs doivent inclure l'en-tête x-oss-request-payer:requester dans leurs requêtes HTTP pour effectuer des opérations sur vos objets. À défaut, une erreur sera renvoyée.
L'exemple suivant démontre comment spécifier que les tiers sont facturés lors de l'accès aux objets en appelant les opérations PutObject, GetObject et DeleteObject. Vous pouvez appliquer une méthode similaire pour facturer les tiers lors d'opérations de lecture et d'écriture via d'autres API.
using System;
using System.IO;
using System.Text;
using Aliyun.OSS;
using Aliyun.OSS.Common;
namespace Samples
{
public class Program
{
public static void Main(string[] args)
{
// Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com.
var endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are set.
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// Specify the name of the bucket. Example: examplebucket.
var bucketName = "examplebucket";
var objectName = "example.txt";
var objectContent = "More than just cloud.";
// Specify the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the region to cn-hangzhou.
const string region = "cn-hangzhou";
// Create a ClientConfiguration instance and modify parameters as required.
var conf = new ClientConfiguration();
// Use the signature algorithm V4.
conf.SignatureVersion = SignatureVersion.V4;
// Create an OSSClient instance.
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
try
{
byte[] binaryData = Encoding.ASCII.GetBytes(objectContent);
MemoryStream requestContent = new MemoryStream(binaryData);
// Specify the payer when a third party calls the PutObject operation.
var putRequest = new PutObjectRequest(bucketName, objectName, requestContent);
putRequest.RequestPayer = RequestPayer.Requester;
var result = client.PutObject(putRequest);
// Specify the payer when a third party calls the GetObject operation.
var getRequest = new GetObjectRequest(bucketName, objectName);
getRequest.RequestPayer = RequestPayer.Requester;
var getResult = client.GetObject(getRequest);
// Specify the payer when a third party calls the DeleteObject operation.
var delRequest = new DeleteObjectRequest(bucketName, objectName);
delRequest.RequestPayer = RequestPayer.Requester;
client.DeleteObject(delRequest);
}
catch (OssException ex)
{
Console.WriteLine("Failed with error code: {0}; Error info: {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);
}
}
}
}
Références
Pour plus d'informations sur l'opération API permettant d'activer le paiement par demandeur, consultez PutBucketRequestPayment.
Pour en savoir plus sur l'opération API utilisée pour interroger la configuration du paiement par demandeur d'un compartiment, voir GetBucketRequestPayment.