OSS传输加速利用全球分布的云机房,将全球各地用户对您存储空间(Bucket)的访问,经过智能路由解析至就近的接入点,使用优化后的网络及协议,为云存储互联网的上传、下载提供端到端的加速方案。
前提条件
已在实名登记页面完成实名认证。
使用场景
- 远距离数据传输加速
例如全球性的论坛、Top在线协同办公平台等,部分客户会因传输距离较远导致上传和下载体验非常差。传输加速功能可以让全球各地的客户使用优化后的网络来传输数据,极大地提升上传和下载速度,让不同地域的用户都能有很好的访问体验。
- GB、TB级大文件上传和下载
通过互联网远距离上传和下载大文件时,经常会因为网络延迟过大而导致传输失败。传输加速功能使用优化的互联网传输链路、调优的协议栈与传输算法,可大幅减少远距离互联网传输超时的比例。您还可以让传输加速功能与分片上传、断点续传下载结合,形成远距离大文件上传和下载的解决方案。
- 非静态、非热点数据下载加速
例如相册应用、游戏、电商、社交应用的评论内容、企业门户网站、金融类APP等,用户的下载体验直接影响产品竞争力和客户留存率。传输加速功能作为专为OSS上传、下载加速而设计的功能,可以最大限度利用客户端的网络能力,提升用户的下载体验。
注意事项
- 传输加速开启及关闭操作会在30分钟内全网生效。
- 开启传输加速后必须使用OSS的传输加速域名才会提升访问速度。
- 如果您工具中配置的Endpoint为传输加速Endpoint时,您只能操作已开启传输加速功能的Bucket。
- 开启传输加速功能后,OSS提供的其他Endpoint仍可正常使用。在不需要传输加速的场景中,您可以使用默认Endpoint以减少传输加速的费用。
- 传输加速Endpoint仅支持HTTP/HTTPS协议的API接入,不支持RTMP协议等非HTTP/HTTPS协议的API接入。
- 为保证数据传输安全,传输加速后段加速逻辑会视情况选择使用HTTPS协议进行数据传输。所以,客户端使用HTTP协议通过传输加速域名访问OSS时,在OSS的访问日志中看OSS仅支持到的访问协议可能是HTTPS。
- 如果您开启了传输加速功能,且使用传输加速域名访问您的Bucket时,OSS会收取传输加速费用。关于费用说明,请参见传输加速费用。
开启传输加速
通过以下多种方式开启传输加速后,Bucket会在保留默认Endpoint的基础上,新增以下两种传输加速Endpoint。
- 全球加速Endpoint:地址为oss-accelerate.aliyuncs.com。传输加速接入点分布在全球各地,全球各地的Bucket均可以使用该域名进行传输加速。
- 非中国内地加速Endpoint:地址为oss-accelerate-overseas.aliyuncs.com。传输加速接入点分布在除中国内地以外的各地域,仅在中国香港及海外各地域Bucket绑定未备案的域名做CNAME指向时使用。
使用OSS控制台
- 登录OSS管理控制台。
- 单击Bucket列表,然后单击目标Bucket名称。
- 在左侧导航栏,选择 。
- 在传输加速页面,打开传输加速开关,然后在弹出的对话框单击确定。
使用阿里云SDK
以下仅列举常见SDK开启传输加速的代码示例。关于其他SDK的开启传输加速的代码示例,请参见SDK简介。
import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
public class Demo {
public static void main(String[] args) throws Exception {
// 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";
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
try {
// 设置Bucket的传输加速状态。
// 当设置enabled为true时,表示开启传输加速;当设置enabled为false时,表示关闭传输加速。
boolean enabled = true;
ossClient.setBucketTransferAcceleration(bucketName, enabled);
} 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();
}
}
}
}
import oss2
# 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
auth = oss2.Auth('yourAccessKeyId', 'yourAccessKeySecret')
# yourEndpoint填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
# 填写Bucket名称,例如examplebucket。
bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'examplebucket')
# 设置Bucket的传输加速状态。
# 当设置enabled为true时,表示开启传输加速;当设置enabled为false时,表示关闭传输加速。
enabled = 'true'
bucket.put_bucket_transfer_acceleration(enabled)
package main
import (
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func HandleError(err error) {
fmt.Println("Error:", err)
os.Exit(-1)
}
func main() {
// 创建OSSClient实例。
// Endpoint为Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
client, err := oss.New("yourEndpoint", "yourAccessKeyId", "yourAccessKeySecret")
if err != nil {
HandleError(err)
}
// 填写Bucket名称。
bucketName := "examplebucket"
// 开启Bucket的传输加速状态。
// Enabled表示传输加速的开关,取值为true表示开启传输加速,取值为false表示关闭传输加速。
accConfig := oss.TransferAccConfiguration{}
accConfig.Enabled = true
err = client.SetBucketTransferAcc(bucketName, accConfig)
if err != nil {
HandleError(err)
}
fmt.Printf("set bucket transfer accelerate success\n")
}
使用REST API
如果您的程序自定义要求较高,您可以直接发起REST API请求。直接发起REST API请求需要手动编写代码计算签名。更多信息,请参见PutBucketTransferAcceleration。
使用传输加速
使用浏览器
使用命令行工具ossutil
- 替换配置文件的Endpoint为传输加速Endpoint
通过ossutil访问时,您可以将配置文件内的Endpoint替换为传输加速Endpoint。具体步骤,请参见ossutil。
- 在命令示例中增加
-e oss-accelerate.aliyuncs.com
在使用ossutil相关命令时,在命令示例中增加
-e oss-accelerate.aliyuncs.com
。下图表示在cp命令上传场景中使用了传输加速Endpoint:
使用图形化管理工具ossbrowser
各配置项说明如下:
参数 | 说明 |
---|---|
Endpoint | 选择自定义,并填写传输加速Endpoint:https://oss-accelerate.aliyuncs.com。 |
AccessKeyId、AccessKeySecret | 填写账号的AccessKey(AK)信息。获取AK的方式,请参见创建AccessKey。
重要 为保证数据安全,推荐您使用RAM用户的AK登录ossbrowser。使用RAM用户登录之前,需要为RAM用户配置
AliyunOSSFullAccess 、AliyunRAMFullAccess 以及AliyunSTSAssumeRoleAccess 的权限。具体操作请参见权限管理。
|
预设OSS路径 | 指定访问某个Bucket或Bucket某个路径下资源的访问权限。预设OSS路径格式为oss://bucketname/path。例如授权访问存储空间examplebucket下文件夹examplefolder下的文件或子文件夹,则填写oss://examplebucket/examplefolder/。 |
配置示例如下:

使用阿里云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.PutObjectRequest; import java.io.File; public class Demo { public static void main(String[] args) throws Exception { // 填写传输加速Endpoint。以全球加速Endpoint为例。 String endpoint = "https://oss-accelerate.aliyuncs.com"; // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。 String accessKeyId = "yourAccessKeyId"; String accessKeySecret = "yourAccessKeySecret"; // 填写Bucket名称,例如examplebucket。 String bucketName = "examplebucket"; // 填写Object完整路径,例如exampledir/exampleobject.txt。Object完整路径中不能包含Bucket名称。 String objectName = "exampledir/exampleobject.txt"; // 填写本地文件的完整路径,例如D:\\localpath\\examplefile.txt。 // 如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件。 String filePath= "D:\\localpath\\examplefile.txt"; // 创建OSSClient实例。 OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); try { // 创建PutObjectRequest对象。 PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, filePath); // 如果需要上传时设置存储类型和访问权限,请参考以下示例代码。 // ObjectMetadata metadata = new ObjectMetadata(); // metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard.toString()); // metadata.setObjectAcl(CannedAccessControlList.Private); // putObjectRequest.setMetadata(metadata); // 上传文件。 ossClient.putObject(putObjectRequest); } 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(); } } } }
- 简单下载
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 java.io.File; public class Demo { public static void main(String[] args) throws Exception { // 填写传输加速Endpoint。以全球加速Endpoint为例。 String endpoint = "https://oss-accelerate.aliyuncs.com"; // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。 String accessKeyId = "yourAccessKeyId"; String accessKeySecret = "yourAccessKeySecret"; // 填写Bucket名称,例如examplebucket。 String bucketName = "examplebucket"; // 填写不包含Bucket名称在内的Object完整路径,例如testfolder/exampleobject.txt。 String objectName = "testfolder/exampleobject.txt"; String filePath = "D:\\localpath\\examplefile.txt"; // 创建OSSClient实例。 OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); try { // 下载Object到本地文件,并保存到指定的本地路径中。如果指定的本地文件存在会覆盖,不存在则新建。 // 如果未指定本地路径,则下载后的文件默认保存到示例程序所属项目对应本地路径中。 ossClient.getObject(new GetObjectRequest(bucketName, objectName), new File(filePath)); } 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(); } } } }
测试传输加速效果
使用命令行工具ossutil
通过在ossutil命令示例中测试未开启传输加速前(即使用-e oss-us-west-1.aliyuncs.com
)以及开启传输加速后(即使用-e oss-accelerate.aliyuncs.com
)上传文件所需时间的差异。

使用在线工具
您可以通过OSS全球传输加速效果对比工具测试您本地访问全球各地数据中心时,开启传输加速与未开启传输加速的访问速度。
常见问题
- 传输加速与CDN加速有什么区别?
功能 原理 适用场景 传输加速 通过智能调度的系统、优化的传输链路、调优的协议栈与传输算法,并深度结合OSS服务端的配套策略,提供的端到端的加速方案。 - 文件上传加速场景。
- 远距离的文件上传、下载场景。
- 大文件上传、下载场景。
- 动态更新文件、非热点文件的下载加速场景。
CDN加速 将OSS的Bucket作为源站,将源内容缓存到边缘节点。当客户读取数据时,会从最适合的节点获取缓存文件,以提升下载速度。 静态热点文件的下载加速场景,即同一地区大量用户同时下载同一个静态文件的场景。 - 如何通过自定义域名使用传输加速服务?
您可以绑定自定义域名之后,将CNAME指向传输加速域名。具体操作,请参见绑定传输加速域名。
- 为什么使用传输加速Endpoint无法列举Bucket?
传输加速服务仅针对携带Bucket名称信息的三级域名(格式为
https://BucketName.oss-accelerate.aliyuncs.com
)提供解析服务。而列举Bucket的请求域名中不携带Bucket名称信息,因此您无法使用传输加速Endpoint列举Bucket。建议您通过默认Endpoint列举目标地域的Bucket,例如https://oss-cn-hangzhou.aliyuncs.com
。 - OSS是否支持同时使用CDN加速和传输加速?
支持。您只需开通传输加速,并将CDN回源到传输加速域名即可。更多信息,请参见绑定CDN加速域名。