客户端访问OSS内的文件时会占用较大带宽,在一些不容易做流控的客户端上可能会对其他应用造成影响。为避免这种问题,您可以通过OSS提供的单链接限速功能在上传、下载、拷贝文件时进行流量控制,以保证其他应用的网络带宽。
使用场景
- 移动端、Web端等不易实现客户端限速的场景,可以通过单链接限速限制访问OSS的带宽,以保证其他应用的正常使用。
- 当您需要分享OSS内的文件给他人访问时,可以通过单链接限速限制此次访问的带宽,以保证您其他业务或其他用户的正常访问。
操作方式
您可以在PutObject、AppendObject、PostObject、CopyObject、UploadPart、UploadPartCopy、GetObject请求中增加x-oss-traffic-limit
参数,并指定限速值,OSS将按照指定的限速值对此次请求进行限速。限速值范围为819200 bit/s~838860800 bit/s。具体操作方式如下:
- 分享文件时进行限速
您可以在分享给他人的文件URL中加入限速参数,当访问者使用该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时,将限速参数加入签名中一起计算。以Java SDK生成带限速参数的文件签名URL为例,代码如下:
// 目标Bucket所在地域的Endpoint,以华东1(杭州)地域为例。 String endpoint = "http://oss-cn-hangzhou.aliyuncs.com"; // 拥有目标Bucket访问权限的AccessKey。阿里云账号的AccessKey拥有所有资源的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维。 String accessKeyId = "yourAccessKeyId"; String accessKeySecret = "yourAccessKeySecret"; // 目标Bucket名称。 String bucketName = "yourBucketName" // 目标文件名称。需填写包含文件路径在内的完整文件名,例如examplefolder/example.txt。 String objectName = "yourObjectName" // 限速819200 bit/s,即100 KB/s。 int limitSpeed = 100 * 1024 * 8; // 创建OSSClient实例。 OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); // 生成有效期为60秒的签名URL。 Date date = new Date(); date.setTime(date.getTime() + 60 * 1000); GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucketName, objectName, HttpMethod.GET); request.setExpiration(date); request.setTrafficLimit(limitSpeed); URL signedUrl = ossClient.generatePresignedUrl(request); ossClient.shutdown();
- 分享公共读或公共读写文件
- 客户端发起请求时限速
以Java SDK进行简单上传时限速为例,代码如下:
// 目标Bucket所在地域的Endpoint,以华东1(杭州)地域为例。 String endpoint = "http://oss-cn-hangzhou.aliyuncs.com"; // 拥有目标Bucket访问权限的AccessKey。阿里云账号的AccessKey拥有所有资源的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维。 String accessKeyId = "yourAccessKeyId"; String accessKeySecret = "yourAccessKeySecret"; // 目标Bucket名称。 String bucketName = "yourBucketName" // 上传后的文件名称。需填写包含文件路径在内的完整文件名,例如examplefolder/example.txt。 String objectName = "yourObjectName" // 本地文件路径。需填写包含文件路径在内的完整文件名。 String localFileName = "yourLocalFileName" // 限速819200 bit/s,即100 KB/s。 int limitSpeed = 100 * 1024 * 8; // 创建OSSClient实例。 OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); // 上传文件。 InputStream inputStream = new FileInputStream(localFileName); PutObjectRequest PutObjectRequest = new PutObjectRequest(bucketName, key, inputStream); PutObjectRequest.setTrafficLimit(limitSpeed); ossClient.putObject(PutObjectRequest); ossClient.shutdown();
在文档使用中是否遇到以下问题
更多建议
匿名提交