请求者付费模式
请求者付费模式是指由请求者支付读取存储空间(Bucket)内数据时产生的流量费用和请求费用,而Bucket拥有者仅支付存储费用。当您希望共享数据,但又不希望产生流量费用和请求费用时,您可以开启此功能。
请求方式说明
- 不允许匿名访问
如果您的Bucket启用了请求者付费模式,则不允许匿名访问该Bucket。请求方必须提供身份验证信息,以便OSS能够识别请求方,从而对请求方而非Bucket拥有者收取请求所产生的费用。
当请求者是通过扮演阿里云RAM角色来请求数据时,该角色所属的账户将为此请求付费。
- 申请方需携带x-oss-request-payer信息
如果您的Bucket启用了请求者付费模式,请求方必须在PUT、POST、GET和HEAD等请求的Header信息中包含x-oss-request-payer:requester,以表明请求方知道请求和数据下载将产生费用。否则,请求方无法通过验证。
数据拥有者访问该Bucket时,可以不携带x-oss-request-payer请求头。数据拥有者作为请求者访问该Bucket时,请求产生的费用由数据拥有者(也是请求者)来支付。
有关请求者付费模式的详情,请参见开发指南的请求者付费模式。
设置请求者付费模式
以下代码用于设置请求者付费模式:
const OSS = require('ali-oss')
const client = new OSS({
region: '<Your region>',
// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
accessKeyId: '<Your AccessKeyId>',
accessKeySecret: '<Your AccessKeySecret>',
});
async function setBucketRequestPayment(bucket, Payer) {
try {
// bucket填写需要设置请求者付费模式的bucket名称。
// Payer取值为Requester或BucketOwner。
// Payer设置为Requester,表明该存储空间已开启请求者付费模式,由请求者支付读取存储空间(Bucket)内数据时产生的流量费用和请求费用。
// Payer设置为BucketOwner,表明该存储空间不开启请求者付费模式(默认状态),即请求产生的费用由数据拥有者(BucketOwner)来支付。
let result = await client.putBucketRequestPayment(bucket, Payer);
console.log(result);
} catch (e) {
console.log(e);
}
}
setBucketRequestPayment('bucketName', 'Requester')
设置存储空间请求者付费模式更多详情,请参见PutBucketRequestPayment。
获取请求者付费模式配置
以下代码用于获取请求者付费模式配置:
const OSS = require('ali-oss')
const client = new OSS({
region: '<Your region>',
// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
accessKeyId: '<Your AccessKeyId>',
accessKeySecret: '<Your AccessKeySecret>',
});
async function getBucketRequestPayment(bucket) {
try {
// 获取存储空间请求者付费模式配置信息。
let result = await client.getBucketRequestPayment(bucket);
console.log(result.payer);
} catch (e) {
console.log(e);
}
}
getBucketRequestPayment('bucketName')
获取存储空间请求者付费模式配置信息的更多详情,请参见GetBucketRequestPayment。
第三方付费访问Object
第三方操作Object时需在http header中携带x-oss-request-payer:requester参数,否则会报错。
以下代码以PutObject、GetObject和DeleteObject为例,用于指定第三方付费访问Object。其他用于指定第三方付费的Object读写操作接口设置方法类似。
以下代码用于设置第三方付费访问Object:
const OSS = require('ali-oss')
const bucket = 'bucket-name'
const payer = 'Requester'
const client = new OSS({
region: '<Your region>',
// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录https://ram.console.aliyun.com 创建RAM账号。
accessKeyId: '<Your AccessKeyId>',
accessKeySecret: '<Your AccessKeySecret>',
bucket: bucket
});
async function put() {
await client.putBucketRequestPayment(bucket, payer)
// putObject接口指定付费者。
await client.put('fileName', 'fileContent', {
headers: {
'x-oss-request-payer': 'requester'
}
})
}
async function get() {
await client.putBucketRequestPayment(bucket, payer)
// getObject接口指定付费者。
await client.get('fileName', {
headers: {
'x-oss-request-payer': 'requester'
}
})
}
async function del() {
await client.putBucketRequestPayment(bucket, payer)
// deleteObject接口指定付费者。
await client.delete('fileName', {
headers: {
'x-oss-request-payer': 'requester'
}
})
}
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。
评论