说明 无地域属性存储空间不支持开启请求者付费模式。
请求方式 不允许匿名访问
如果您在 Bucket 上启用了请求者付费模式,则不允许匿名访问该 Bucket。请求方必须提供身份验证信息,以便 OSS 能够识别请求方,从而对请求方而非 Bucket 拥有者收取请求所产生的费用。
当请求者是通过扮演阿里云 RAM 角色来请求数据时,该角色所属的账户将为此请求付费。
请求中需携带请求头x-oss-request-payer
如果您在 Bucket 上启用了请求者付费模式,请求中必须携带x-oss-request-payer
请求头,且取值为requester ,以表明请求方已了解需要支付请求和数据下载费用。否则,请求方无法通过验证。
数据拥有者访问该 Bucket 时,可以不携带x-oss-request-payer
请求头。当数据拥有者作为请求者访问该 Bucket 时,请求产生的费用由数据拥有者(也是请求者)来支付。
费用说明 Bucket 开启请求者付费前,所有费用均由 Bucket 拥有者支付。Bucket 开启请求者付费模式后,由 Bucket 拥有者支付的计费项将产生变化。Bucket 拥有者以及请求者支付的详细说明如下:
费用
计费项
支付者
存储费用
标准存储(本地冗余)容量
Bucket 拥有者
标准存储(同城冗余)容量
Bucket 拥有者
低频访问(本地冗余)容量
Bucket 拥有者
低频访问(同城冗余)容量
Bucket 拥有者
归档(本地冗余)容量
Bucket 拥有者
归档(同城冗余)容量
Bucket 拥有者
冷归档(本地冗余)容量
Bucket 拥有者
深度冷归档(本地冗余)容量
Bucket 拥有者
低频访问(本地冗余)不足规定时长容量
Bucket 拥有者
归档存储(本地冗余)不足规定时长容量
Bucket 拥有者
归档存储(同城冗余)不足规定时长容量
Bucket 拥有者
冷归档存储不足规定时长容量
Bucket 拥有者
深度冷归档存储不足规定时长容量
Bucket 拥有者
无地域属性存储容量
Bucket 拥有者
流量费用
外网流出流量
请求者
外网流入流量
免费
内网流出流量
免费
内网流入流量
免费
CDN 回源流出流量
请求者
跨区域复制流量
Bucket 拥有者
① 请求费用
Put 类型请求次数
请求者
Get 类型请求次数
请求者
取回请求
Bucket 拥有者
数据处理
图片处理
请求者
图片高级压缩
Bucket 拥有者
视频截帧
请求者
Select 扫描数据量
Bucket 拥有者
低频访问数据取回容量
请求者
归档存储数据取回容量
请求者
归档直读数据取回容量
Bucket 拥有者
冷归档存储数据取回容量
Bucket 拥有者
深度冷归档存储数据取回容量
Bucket 拥有者
对象标签费用
对象标签
Bucket 拥有者
传输加速费用
传输加速 AccM2MIn
Bucket 拥有者
传输加速 AccM2MOut
Bucket 拥有者
传输加速 AccM2OIn
Bucket 拥有者
传输加速 AccM2OOut
Bucket 拥有者
传输加速 AccO2MIn
Bucket 拥有者
传输加速 AccO2MOut
Bucket 拥有者
传输加速 AccO2OIn
Bucket 拥有者
传输加速 AccO2OOut
Bucket 拥有者
临时存储费用
临时存储容量(本地冗余)
Bucket 拥有者
DDoS 防护费用
高防资源预留费用
Bucket 拥有者
高防资源提前释放费用
Bucket 拥有者
高防流量防护费用
Bucket 拥有者
高防请求防护费用
Bucket 拥有者
数据索引费用
Meta 管理费
公测阶段,免费
Bucket 查询费
公测阶段,免费
敏感数据保护费用
敏感数据保护扫描容量
Bucket 拥有者
OSS 加速器费用
OSS 加速器容量
Bucket 拥有者
OSS-HDFS 元数据管理费用
元数据管理
Bucket 拥有者
跨区域复制 RTC 费用
跨区域复制 RTC
Bucket 拥有者
说明 ① 如果请求者未在请求中(GET、HEAD 或 POST)声明请求者付费的请求头x-oss-request-payer
,则由 Bucket 拥有者支付 Put 类和 Get 类请求次数费用。
操作步骤 使用 OSS 控制台 登录OSS 管理控制台 。
单击Bucket 列表 ,然后单击目标 Bucket 名称。
在左侧导航栏,选择。
在请求者付费 页面,打开请求者付费 开关。
在弹出的对话框,单击确定 。
说明 如果您需要关闭请求者付费,您可以关闭请求者付费 开关,然后单击确定 。
使用阿里云 SDK 以下仅列举常见 SDK 的设置请求者付费模式的代码示例。关于其他 SDK 的设置请求者付费模式的代码示例,请参见SDK 简介 。
Java 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.model.*;
public class Demo {
public static void main(String[] args) throws Exception{
// Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// 填写Bucket名称,例如examplebucket。
String bucketName = "examplebucket";
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);
try {
// 设置请求者付费模式。
Payer payer = Payer.Requester;
ossClient.setBucketRequestPayment(bucketName, payer);
} 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 (Throwable 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 {
// 关闭OSSClient。
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}
PHP <?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\Core\OssException;
// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
$provider = new EnvironmentVariableCredentialsProvider();
// Endpoint以杭州为例,其它Region请按实际情况填写。
$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
// 填写Bucket名称,例如examplebucket。
$bucket= "examplebucket";
try {
$config = array(
"provider" => $provider,
"endpoint" => $endpoint,
);
$ossClient = new OssClient($config);
$ossClient->putBucketRequestPayment($bucket, "Requester");
} catch (OssException $e) {
printf(__FUNCTION__ . ": FAILED\n");
printf($e->getMessage() . "\n");
return;
}
print(__FUNCTION__ . ": OK" . "\n");
Node.js const OSS = require('ali-oss')
const client = new OSS({
// yourregion填写Bucket所在地域。以华东1(杭州)为例,Region填写为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
});
async function setBucketRequestPayment(bucket, Payer) {
try {
// bucket填写需要设置请求者付费模式的存储空间名称。
// Payer取值为Requester或BucketOwner。
// Payer设置为Requester,表明该存储空间已开启请求者付费模式,由请求者支付读取存储空间(Bucket)内数据时产生的流量费用和请求费用。
// Payer设置为BucketOwner,表明该存储空间不开启请求者付费模式(默认状态),即请求产生的费用由数据拥有者(BucketOwner)来支付。
const result = await client.putBucketRequestPayment(bucket, Payer);
console.log(result);
} catch (e) {
console.log(e);
}
}
setBucketRequestPayment('bucketName', 'Requester')
Python # -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
from oss2.models import PAYER_BUCKETOWNER, PAYER_REQUESTER
# 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
auth = oss2.ProviderAuth(EnvironmentVariableCredentialsProvider())
# yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
# 填写Bucket名称,例如examplebucket。
bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'examplebucket')
# 设置请求者付费模式,默认的付费者为PAYER_BUCKETOWNER。
result = bucket.put_bucket_request_payment(PAYER_REQUESTER)
print("http respon status: ", result.status)
C# using Aliyun.OSS;
using Aliyun.OSS.Common;
// yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为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");
// 填写Bucket名称。
var bucketName = "examplebucket";
// 创建OSSClient实例。
var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
try
{
// 设置请求者付费模式。
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);
}
Go package main
import (
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 创建OSSClient实例。
// yourEndpoint填写Bucket对应的Endpoint,以华东1(杭州)为例,填写为https://oss-cn-hangzhou.aliyuncs.com。其它Region请按实际情况填写。
client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
if err != nil {
fmt.Println("New Error:", err)
os.Exit(-1)
}
// 初始化请求者付费模式。
reqPayConf := oss.RequestPaymentConfiguration{
Payer: "Requester",
}
// 设置请求者付费模式。
err = client.SetBucketRequestPayment("<yourBucketName>", reqPayConf)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
}
C++ #include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
{
/*初始化OSS账号信息。*/
/*yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。*/
std::string Endpoint = "yourEndpoint";
/*填写Bucket名称,例如examplebucket。*/
std::string BucketName = "examplebucket";
/*初始化网络等资源。*/
InitializeSdk();
ClientConfiguration conf;
/* 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。*/
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
/*设置请求者付费模式。*/
SetBucketRequestPaymentRequest request(BucketName);
request.setRequestPayer(RequestPayer::Requester);
auto outcome = client.SetBucketRequestPayment(request);
if (!outcome.isSuccess()) {
/*异常处理。*/
std::cout << "SetBucketRequestPayment fail" <<
",code:" << outcome.error().Code() <<
",message:" << outcome.error().Message() <<
",requestId:" << outcome.error().RequestId() << std::endl;
return -1;
}
/*释放网络等资源。*/
ShutdownSdk();
return 0;
}
使用命令行工具 ossutil 关于使用 ossutil 设置请求者付费模式的具体操作, 请参见设置请求者付费模式 。