客户端访问OSS内的文件(Object)时会占用较大带宽,在某些不容易控制流控的客户端上可能会对其他应用造成影响。为避免此类问题,您可以通过OSS提供的单链接限速功能在上传、下载文件等操作中进行流量控制,以保证其他应用的网络带宽。
注意事项
您可以在PutObject、AppendObject、PostObject、CopyObject、UploadPart、UploadPartCopy、GetObject请求中增加x-oss-traffic-limit参数,并指定限速值。限速值取值范围为819200~838860800,单位为bit/s。
客户端发起请求时限速
通过客户端发起请求时,仅支持通过SDK对其进行限速。以下仅列举常见SDK在客户端发起简单上传或下载请求时进行限速的代码示例。关于其他SDK在客户端发起上传或下载请求时进行限速的代码示例,请参见SDK简介。
import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.GetObjectRequest;
import com.aliyun.oss.model.PutObjectRequest;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
public class Demo {
public static void main(String[] args) throws Throwable {
// Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
String accessKeyId = "yourAccessKeyId";
String accessKeySecret = "yourAccessKeySecret";
// 填写Bucket名称,例如examplebucket。
String bucketName = "examplebucket";
// 填写Object完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampleobject.txt。
String objectName = "exampledir/exampleobject.txt";
// 填写待上传的本地文件的完整路径,例如D:\\localpath\\examplefile.txt。
// 如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件。
String localFileName = "D:\\localpath\\examplefile.txt";
// 填写Object下载到本地文件的完整路径。如果指定的本地文件存在会覆盖,不存在则新建。
// 如果未指定本地路径,则下载后的文件默认保存到示例程序所属项目对应本地路径中。
String downLoadFileName = "D:\\localpath\\exampleobject.txt";
// 限速100 KB/s。
int limitSpeed = 100 * 1024 * 8;
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
try {
// 限速上传。
InputStream inputStream = new FileInputStream(localFileName);
PutObjectRequest PutObjectRequest = new PutObjectRequest(bucketName, objectName, inputStream);
PutObjectRequest.setTrafficLimit(limitSpeed);
ossClient.putObject(PutObjectRequest);
// 限速下载。
GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName, objectName);
getObjectRequest.setTrafficLimit(limitSpeed);
File localFile = new File(downLoadFileName);
ossClient.getObject(getObjectRequest, localFile);
} 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\OssClient;
use OSS\Core\OssException;
// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
$accessKeyId = "yourAccessKeyId";
$accessKeySecret = "yourAccessKeySecret";
// yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
$endpoint = "yourEndpoint";
// 填写Bucket名称,例如examplebucket。
$bucket= "examplebucket";
// 填写Object完整路径,例如exampledir/exampleobject.txt。Object完整路径中不能包含Bucket名称。
$object = "exampledir/exampleobject.txt";
// 填写Object的内容。
$content = "hello world";
$ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint, false);
// 限速100 KB/s,即819200 bit/s。
$options = array(
OssClient::OSS_HEADERS => array(
OssClient::OSS_TRAFFIC_LIMIT => 819200,
));
try {
// 限速上传。
$ossClient->putObject($bucket, $object, $content, $options);
// 限速下载。
$ossClient->getObject($bucket, $object, $options);
} catch (OssException $e) {
printf(__FUNCTION__ . ": FAILED\n");
printf($e->getMessage() . "\n");
return;
}
print(__FUNCTION__ . ": OK" . "\n");
const OSS = require('ali-oss')
const client = new OSS({
bucket: '<Your BucketName>',
// region以杭州为例(oss-cn-hangzhou),其他region按实际情况填写。
region: '<Your Region>',
// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。
accessKeyId: '<Your AccessKeyId>',
accessKeySecret: '<Your AccessKeySecret>',
});
// 通过请求头设置限速。
const headers = {
'x-oss-traffic-limit': 8 * 1024 * 100 // 设置限速,最小100KB/s。
}
// 限速上传。
async function put() {
const result = await client.putStream('<file name>', '<file stream>', {
headers,
timeout: 60000 // 默认超时时长为60000ms。超时直接报错,限速上传时注意修改超时时长。
})
console.log(result)
}
put()
// 限速下载。
async function get() {
const result = await client.get('<file name>', {
headers,
timeout: 60000 // 默认超时时长为60000ms。超时直接报错,限速下载时注意修改超时时长。
})
console.log(result)
}
get()
# -*- coding: utf-8 -*-
import oss2
from oss2.models import OSS_TRAFFIC_LIMIT
# 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
auth = oss2.Auth('yourAccessKeyId', 'yourAccessKeySecret')
# yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
# 填写Bucket名称。
bucket = oss2.Bucket(auth, 'yourEndpoint', 'examplebucket')
# 填写Object完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampleobject.txt。
object_name = 'exampledir/exampleobject.txt'
# 填写待上传的本地文件的完整路径,例如D:\\localpath\\examplefile.txt。如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件。
local_file_name = 'D:\\localpath\\examplefile.txt'
# 填写Object下载到本地文件的完整路径。如果指定的本地文件存在会覆盖,不存在则新建。
# 如果未指定本地路径,则下载后的文件默认保存到示例程序所属项目对应本地路径中。
down_file_name = 'D:\\localpath\\exampleobject.txt'
# 在headers中设置限速100 KB/s,即819200 bit/s。
limit_speed = (100 * 1024 * 8)
headers = dict()
headers[OSS_TRAFFIC_LIMIT] = str(limit_speed);
# 限速上传文件。
result = bucket.put_object_from_file(object_name, local_file_name, headers=headers)
print('http response status:', result.status)
# 限速下载文件到本地。
result = bucket.get_object_to_file(object_name, down_file_name, headers=headers)
print('http response status:', result.status)
using System.Text;
using Aliyun.OSS;
// 填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
var endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
var accessKeyId = "yourAccessKeyId";
var accessKeySecret = "yourAccessKeySecret";
// 填写Bucket名称,例如examplebucket。
var bucketName = "examplebucket";
// 填写Object完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampleobject.txt。
var objectName = "exampledir/exampleobject.txt";
var objectContent = "More than just cloud.";
// 创建OssClient实例。
var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
try
{
byte[] binaryData = Encoding.ASCII.GetBytes(objectContent);
MemoryStream requestContent = new MemoryStream(binaryData);
// 上传文件限速100 KB/s,即819200 bit/s。
var putRequest = new PutObjectRequest(bucketName, objectName, requestContent)
{
TrafficLimit = 100*1024*8
};
client.PutObject(putRequest);
Console.WriteLine("Put object succeeded");
// 下载文件限速100KB/s,即819200bit/s。
var getRequest = new GetObjectRequest(bucketName, objectName)
{
TrafficLimit = 100 * 1024 * 8
};
var getResult = client.GetObject(getRequest);
Console.WriteLine("Get object succeeded");
}
catch (Exception ex)
{
Console.WriteLine("Put object failed, {0}", ex.Message);
}
package main
import (
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 创建OSSClient实例。
// yourEndpoint填写Bucket对应的Endpoint,以华东1(杭州)为例,填写为https://oss-cn-hangzhou.aliyuncs.com。其它Region请按实际情况填写。
// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
client, err := oss.New("yourEndpoint", "yourAccessKeyId", "yourAccessKeySecret")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 填写Bucket名称,例如examplebucket。
bucket, err := client.Bucket("examplebucket")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 填写待上传的本地文件的完整路径,例如D:\\localpath\\examplefile.txt。
// 如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件。
fd, err := os.Open("D:\\localpath\\examplefile.txt")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
defer fd.Close()
// 设置上传限速,参数格式为数字,默认单位为bit/s。本示例设置限速值为5 MB/s。
var traffic int64 = 41943040
// 限速上传。
// 填写Object的完整路径,完整路径中不包含Bucket名称。
err = bucket.PutObject("exampledir/exampleobject.txt", fd, oss.TrafficLimitHeader(traffic))
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 限速下载。
// 依次填写Object的完整路径,完整路径中不包含Bucket名称(例如exampledir/exampleobject.txt)以及本地文件的完整路径(例如D:\\localpath\\exampleobject.txt)。
err = bucket.GetObjectToFile("exampledir/exampleobject.txt", "D:\\localpath\\exampleobject.txt", oss.TrafficLimitHeader(traffic))
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 追加上传.
// localFileOne和localFileTwo表示待上传的两个本地文件的完整路径。上传localFileOne后,继续追加localFileTwo进行上传。
localFileOne := "localFileOne"
localFileTwo := "localFileTwo"
fd1, err := os.Open(localFileOne)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
defer fd.Close()
fd2, err := os.Open(localFileTwo)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
defer fd.Close()
var nextPos int64
nextPos, err = bucket.AppendObject("<yourObjectName>", fd1, nextPos, oss.TrafficLimitHeader(traffic))
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
nextPos, err = bucket.AppendObject("exampledir/exampleobject.txt", fd2, nextPos, oss.TrafficLimitHeader(traffic))
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 大文件分片上传
// 将文件分成3个分片,具体分片数可以视文件大小而定。
chunks, err := oss.SplitFileByPartNum("localFile", 3)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 打开文件。
fd, err = os.Open("fileName")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
defer fd.Close()
// 初始化上传的文件,并设置限速大小。
imur, err := bucket.InitiateMultipartUpload("exampledir/exampleobject.txt")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 分片上传并限速。
var parts []oss.UploadPart
for _, chunk := range chunks {
fd.Seek(chunk.Offset, os.SEEK_SET)
part, err := bucket.UploadPart(imur, fd, chunk.Size, chunk.Number, oss.TrafficLimitHeader(traffic))
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
parts = append(parts, part)
}
// 上传完成。
_, err = bucket.CompleteMultipartUpload(imur, parts)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
}Part
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
{
/* 初始化OSS账号信息。*/
/* 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。*/
std::string AccessKeyId = "yourAccessKeyId";
std::string AccessKeySecret = "yourAccessKeySecret";
/* yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。*/
std::string Endpoint = "yourEndpoint";
/* 填写Bucket名称,例如examplebucket。*/
std::string BucketName = "examplebucket";
/* 填写Object完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampleobject.txt。*/
std::string ObjectName = "exampledir/exampleobject.txt";
/* 初始化网络等资源。*/
InitializeSdk();
ClientConfiguration conf;
OssClient client(Endpoint, AccessKeyId, AccessKeySecret, conf);
/* 上传文件。*/
std::shared_ptr<std::iostream> content = std::make_shared<std::fstream>("yourLocalFilename", std::ios::in|std::ios::binary);
PutObjectRequest putrequest(BucketName, ObjectName,content);
/* 设置上传限速为100 KB/s。*/
putrequest.setTrafficLimit(819200);
auto putoutcome = client.PutObject(putrequest);
/* 获取文件到本地内存。*/
GetObjectRequest getrequest(BucketName, ObjectName);
/* 设置下载限速为100 KB/s。*/
getrequest.setTrafficLimit(819200);
auto getoutcome = client.GetObject(getrequest);
/* 释放网络等资源。*/
ShutdownSdk();
return 0;
}
通过文件URL限速
对于公共读或公共读写文件,您仅需要在分享的文件URL后加入限速参数
x-oss-traffic-limit=<value>
即可实现限速访问。例如,https://examplebucket.oss-cn-hangzhou.aliyuncs.com/video.mp4?x-oss-traffic-limit=819200
表示下载video.mp4文件时限速为100 KB/s。限速效果如下图所示:
通过签名URL限速
对于私有文件,您需要通过SDK在生成签名URL时,将限速参数加入签名中一起计算。以下仅列举常见SDK在签名URL中加入限速参数的代码示例。关于其他SDK的在签名URL中加入限速参数的代码示例,请参见SDK简介。
<?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\OssClient;
use OSS\Core\OssException;
// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
$accessKeyId = "yourAccessKeyId";
$accessKeySecret = "yourAccessKeySecret";
// yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
$endpoint = "yourEndpoint";
// 填写Bucket名称,例如examplebucket。
$bucket= "examplebucket";
// 填写Object完整路径,例如exampledir/exampleobject.txt。Object完整路径中不能包含Bucket名称。
$object = "exampledir/exampleobject.txt";
$ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint, false);
// 限速100 KB/s,即819200 bit/s。
$options = array(
OssClient::OSS_TRAFFIC_LIMIT => 819200,
);
// 创建限速上传的URL,有效期为60s。
$timeout = 60;
$signedUrl = $ossClient->signUrl($bucket, $object, $timeout, "PUT", $options);
print($signedUrl);
// 创建限速下载的URL,有效期为120s。
$timeout = 120;
$signedUrl = $ossClient->signUrl($bucket, $object, $timeout, "GET", $options);
print($signedUrl);
# -*- coding: utf-8 -*-
import oss2
from oss2.models import OSS_TRAFFIC_LIMIT
# 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
auth = oss2.Auth('yourAccessKeyId', 'yourAccessKeySecret')
# yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
# 填写Bucket名称。
bucket = oss2.Bucket(auth, 'yourEndpoint', 'examplebucket')
# 填写Object完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampleobject.txt。
object_name = 'exampledir/exampleobject.txt'
# 填写待上传的本地文件的完整路径,例如D:\\localpath\\examplefile.txt。如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件。
local_file_name = 'D:\\localpath\\examplefile.txt'
# 填写Object下载到本地文件的完整路径。如果指定的本地文件存在会覆盖,不存在则新建。
# 如果未指定本地路径,则下载后的文件默认保存到示例程序所属项目对应本地路径中。
down_file_name = 'D:\\localpath\\exampleobject.txt'
# 在params中设置限速100 KB/s,即819200 bit/s。
limit_speed = (100 * 1024 * 8)
params = dict()
params[OSS_TRAFFIC_LIMIT] = str(limit_speed);
# 创建限速上传文件的签名URL, 有效期60s。
url = bucket.sign_url('PUT', object_name, 60, params=params)
print('put object url:', url)
# 限速上传。
result = bucket.put_object_with_url_from_file(url, local_file_name)
print('http response status:', result.status)
# 创建限速下载文件的签名URL, 有效期60s。
url = bucket.sign_url('GET', object_name, 60, params=params)
print('get object url:', url)
# 限速下载。
result = bucket.get_object_with_url_to_file(url, down_file_name)
print('http response status:', result.status)
package main
import (
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// 创建OSSClient实例。
// yourEndpoint填写Bucket对应的Endpoint,以华东1(杭州)为例,填写为https://oss-cn-hangzhou.aliyuncs.com。其它Region请按实际情况填写。
// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
client, err := oss.New("yourEndpoint", "yourAccessKeyId", "yourAccessKeySecret")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 填写Bucket名称,例如examplebucket。
bucket, err := client.Bucket("examplebucket")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 使用签名URL进行上传。
// 填写本地文件的完整路径,例如D:\\localpath\\exampleobject.txt。
fd, err := os.Open("D:\\localpath\\exampleobject.txt")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
defer fd.Close()
// 设置上传限速,参数格式为数字,默认单位为bit/s。本示例设置限速值为5 MB/s。
var traffic int64 = 41943040
// 获取上传文件的URL。
// 填写Object的完整路径,完整路径中不包含Bucket名称。
strURL, err := bucket.SignURL("exampledir/exampleobject.txt", oss.HTTPPut, 60, oss.TrafficLimitParam(traffic))
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 上传本地文件。
err = bucket.PutObjectWithURL(strURL, fd)
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 使用签名URL进行下载。
// 获取下载文件的URL。
strURL, err = bucket.SignURL("exampledir/exampleobject.txt", oss.HTTPGet, 60, oss.TrafficLimitParam(traffic))
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// 填写Object下载到本地文件的完整路径。
err = bucket.GetObjectToFileWithURL(strURL, "D:\\localpath\\exampleobject.txt")
if err != nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
}
using System.Text;
using Aliyun.OSS;
// 填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
var endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
var accessKeyId = "yourAccessKeyId";
var accessKeySecret = "yourAccessKeySecret";
// 填写Bucket名称,例如examplebucket。
var bucketName = "examplebucket";
// 填写Object完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampleobject.txt。
var objectName = "exampledir/exampleobject.txt";
var objectContent = "More than just cloud.";
// 创建OssClient实例。
var client = new OssClient(endpoint, accessKeyId, accessKeySecret);
try
{
// 生成上传签名URL。
var generatePresignedUriRequest = new GeneratePresignedUriRequest(bucketName, objectName, SignHttpMethod.Put)
{
Expiration = DateTime.Now.AddHours(1),
};
// 限速100 KB/s,即819200 bit/s。
generatePresignedUriRequest.AddQueryParam("x-oss-traffic-limit", "819200");
var signedUrl = client.GeneratePresignedUri(generatePresignedUriRequest);
// 使用签名URL上传文件。
var buffer = Encoding.UTF8.GetBytes(objectContent);
using (var ms = new MemoryStream(buffer))
{
client.PutObject(signedUrl, ms);
}
Console.WriteLine("Put object by signatrue succeeded. {0} ", signedUrl.ToString());
var metadata = client.GetObjectMetadata(bucketName, objectName);
var etag = metadata.ETag;
// 生成下载签名URL。
// 限速100 KB/s,即 819200bit/s。
var req = new GeneratePresignedUriRequest(bucketName, objectName, SignHttpMethod.Get);
req.AddQueryParam("x-oss-traffic-limit", "819200");
var uri = client.GeneratePresignedUri(req);
// 使用签名URL下载文件。
OssObject ossObject = client.GetObject(uri);
using (var file = File.Open(downloadFilename, FileMode.OpenOrCreate))
{
using (Stream stream = ossObject.Content)
{
int length = 4 * 1024;
var buf = new byte[length];
do
{
length = stream.Read(buf, 0, length);
file.Write(buf, 0, length);
} while (length != 0);
}
}
Console.WriteLine("Get object by signatrue succeeded. {0} ", uri.ToString());
}
catch (Exception ex)
{
Console.WriteLine("Put object failed, {0}", ex.Message);
}
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
{
/* 初始化OSS账号信息。*/
/* 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。*/
std::string AccessKeyId = "yourAccessKeyId";
std::string AccessKeySecret = "yourAccessKeySecret";
/* yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。*/
std::string Endpoint = "yourEndpoint";
/* 填写Bucket名称,例如examplebucket。*/
std::string BucketName = "examplebucket";
/* 填写Object完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampleobject.txt。*/
std::string ObjectName = "exampledir/exampleobject.txt";
/* 初始化网络等资源。*/
InitializeSdk();
ClientConfiguration conf;
OssClient client(Endpoint, AccessKeyId, AccessKeySecret, conf);
/* 设置签名URL有效时间为1200s。*/
std::time_t t = std::time(nullptr) + 1200;
/* 生成上传文件URL。*/
GeneratePresignedUrlRequest putrequest(BucketName, PutobjectUrlName, Http::Put);
putrequest.setExpires(expires);
/* 设置上传限速为100 KB/s。*/
putrequest.setTrafficLimit(819200);
auto genOutcome = client.GeneratePresignedUrl(putrequest);
std::shared_ptr<std::iostream> content = std::make_shared<std::stringstream>();
*content << "test cpp sdk";
/* 使用签名URL上传文件。*/
auto outcome = client.PutObjectByUrl(genOutcome.result(), content);
/* 生成下载文件URL。*/
GeneratePresignedUrlRequest getrequest(BucketName, PutobjectUrlName, Http::Get);
getrequest.setExpires(expires);
/* 设置下载限速为100 KB/s。*/
getrequest.setTrafficLimit(819200);
genOutcome = client.GeneratePresignedUrl(getrequest);
/* 使用签名URL下载文件。*/
outcome = client.GetObjectByUrl(genOutcome.result());
/* 释放网络等资源。*/
ShutdownSdk();
return 0;
}