更新时间:2026-08-14 GMT+08:00
如何实现上传下载限速
OBS 支持在上传或下载对象时对单条链接进行限速,通过在请求中设置自定义头域 x-obs-traffic-limit,SDK 透传该头域至服务端,服务端校验后完成限速控制。
- 限速单位:bit/s。例如 819200 表示限速 100KB/s(819200 bit/s ÷ 8 = 102400 B/s = 100 KB/s)。
- 适用场景:当需要在带宽有限的环境中控制 OBS 请求的传输速率,避免占用过多网络资源时,可使用单链接限速功能。
- 适用接口:上传对象(PutObject)和下载对象(GetObject)。
| 约束项 | 说明 |
|---|---|
| 限速头域 | x-obs-traffic-limit |
| 限速值范围 | 819200 ~ 838860800(即 100KB/s ~ 100MB/s) |
| 限速单位 | bit/s |
| 设置方式 | 通过 PutObjectRequest.setUserHeaders() 或 GetObjectRequest.setUserHeaders() 设置自定义头域 |
代码示例一:上传限速
以下代码展示了在上传对象时设置单链接限速。
// 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;
// 本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量ACCESS_KEY_ID和SECRET_ACCESS_KEY_ID。
// 您可以登录访问管理控制台获取访问密钥AK/SK
String ak = System.getenv("ACCESS_KEY_ID");
String sk = System.getenv("SECRET_ACCESS_KEY_ID");
// endpoint填写桶所在的endpoint, 此处以华北-北京四为例,其他地区请按实际情况填写。
String endPoint = "https://your-endpoint";
// 创建ObsClient实例
ObsClient obsClient = new ObsClient(ak, sk, endPoint);
try {
// 文件上传
// localfile 为待上传的本地文件路径,需要指定到具体的文件名
PutObjectRequest request = new PutObjectRequest();
request.setBucketName("examplebucket");
request.setObjectKey("objectname");
request.setFile(new File("localfile"));
HashMap<String, String> userHeaders = new HashMap<>();
// x-obs-traffic-limit为自定义限速功能,单位为bit/s,此处以819200为例,表示此请求限速100KB/s
userHeaders.put("x-obs-traffic-limit", "819200");
request.setUserHeaders(userHeaders);
PutObjectResult result = obsClient.putObject(request);
Log.i("PutObject", "putObject successfully");
} catch (ObsException e) {
Log.e("PutObject", "Response Code: " + e.getResponseCode());
Log.e("PutObject", "Error Message: " + e.getErrorMessage());
Log.e("PutObject", "Error Code: " + e.getErrorCode());
Log.e("PutObject", "Request ID: " + e.getErrorRequestId());
Log.e("PutObject", "Host ID: " + e.getErrorHostId());
} catch (Exception e) {
Log.e("PutObject", "putObject failed: " + e.getMessage());
} 代码示例二:下载限速
以下代码展示了在下载对象时设置单链接限速。
// 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;
// 本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量ACCESS_KEY_ID和SECRET_ACCESS_KEY_ID。
// 您可以登录访问管理控制台获取访问密钥AK/SK
String ak = System.getenv("ACCESS_KEY_ID");
String sk = System.getenv("SECRET_ACCESS_KEY_ID");
// endpoint填写桶所在的endpoint, 此处以华北-北京四为例,其他地区请按实际情况填写。
String endPoint = "https://your-endpoint";
// 创建ObsClient实例
ObsClient obsClient = new ObsClient(ak, sk, endPoint);
try {
// 下载对象
GetObjectRequest request = new GetObjectRequest("examplebucket", "objectname");
HashMap<String, String> userHeaders = new HashMap<>();
// x-obs-traffic-limit为自定义限速功能,单位为bit/s,此处以819200为例,表示此请求限速100KB/s
userHeaders.put("x-obs-traffic-limit", "819200");
request.setUserHeaders(userHeaders);
ObsObject obsObject = obsClient.getObject(request);
// 读取对象内容
InputStream input = obsObject.getObjectContent();
byte[] b = new byte[1024];
ByteArrayOutputStream bos = new ByteArrayOutputStream();
int len;
while ((len = input.read(b)) != -1) {
bos.write(b, 0, len);
}
Log.i("GetObject", "getObjectContent successfully");
Log.i("GetObject", new String(bos.toByteArray()));
bos.close();
input.close();
} catch (ObsException e) {
Log.e("GetObject", "Response Code: " + e.getResponseCode());
Log.e("GetObject", "Error Message: " + e.getErrorMessage());
Log.e("GetObject", "Error Code: " + e.getErrorCode());
Log.e("GetObject", "Request ID: " + e.getErrorRequestId());
Log.e("GetObject", "Host ID: " + e.getErrorHostId());
} catch (Exception e) {
Log.e("GetObject", "getObjectContent failed: " + e.getMessage());
} 父主题: 常见问题