tencent cloud

Feedback

Single-Connection Bandwidth Limit

Last updated: 2024-06-25 10:53:13

    Overview

    This document describes how to limit the speed on a single URL when calling the upload or download API.

    SDK API References

    For the parameters and method descriptions of all the APIs in the SDK, see SDK API Reference.

    Directions

    The speed range is 819200 to 838860800 (in bit/s), that is, 100 KB/s to 100 MB/s. If a value is not within this range, 400 will be returned.

    Sample 1. Limiting single-URL speed on uploads

    TransferConfig transferConfig = new TransferConfig.Builder().build();
    // Initialize TransferManager
    TransferManager transferManager = new TransferManager(cosXmlService,
    transferConfig);
    
    // Bucket name in the format of BucketName-APPID (APPID is required), which can be viewed in the COS console at https://console.tencentcloud.com/cos5/bucket
    String bucket = "examplebucket-1250000000";
    String cosPath = "exampleobject"; // Location identifier of the object in the bucket, i.e., the object key
    String srcPath = new File(context.getCacheDir(), "exampleobject")
    .toString(); // Absolute path of the local file
    // If there is an uploadId for the initialized multipart upload, assign the value of uploadId here to resume the upload. Otherwise, assign null
    String uploadId = null;
    
    PutObjectRequest putObjectRequest = new PutObjectRequest(bucket, cosPath, srcPath);
    // Set the bandwidth limit for a single request in bit/s. In the example, the limit is set to 1 Mbit/s
    putObjectRequest.setTrafficLimit(1024 * 1024 * 8);
    
    // Upload the object
    COSXMLUploadTask cosxmlUploadTask = transferManager.upload(putObjectRequest, uploadId);
    
    // Set the upload progress callback
    cosxmlUploadTask.setCosXmlProgressListener(new CosXmlProgressListener() {
    @Override
    public void onProgress(long complete, long target) {
    // todo Do something to update progress...
    }
    });
    // Set the response callback
    cosxmlUploadTask.setCosXmlResultListener(new CosXmlResultListener() {
    @Override
    public void onSuccess(CosXmlRequest request, CosXmlResult result) {
    COSXMLUploadTask.COSXMLUploadTaskResult uploadResult =
    (COSXMLUploadTask.COSXMLUploadTaskResult) result;
    }
    
    // If you use the Kotlin language to call this, please note that the exception in the callback method is nullable; otherwise, the onFail method will not be called back, that is:
    // clientException is of type CosXmlClientException? and serviceException is of type CosXmlServiceException?
    @Override
    public void onFail(CosXmlRequest request,
    @Nullable CosXmlClientException clientException,
    @Nullable CosXmlServiceException serviceException) {
    if (clientException != null) {
    clientException.printStackTrace();
    } else {
    serviceException.printStackTrace();
    }
    }
    });
    // Set the job status callback to view the job progress
    cosxmlUploadTask.setTransferStateListener(new TransferStateListener() {
    @Override
    public void onStateChanged(TransferState state) {
    // todo notify transfer state
    }
    });
    Note:
    For the complete sample, please visit GitHub.

    Sample 2. Limiting single-URL speed on downloads

    //.cssg-snippet-body-start:[transfer-download-object]
    // The advanced download API supports checkpoint restart. Therefore, a HEAD request will be sent before the download to obtain the file information.
    // If you are using a temporary key or accessing with a sub-account, ensure that your permission list includes HeadObject.
    
    // Initialize TransferConfig. The default configuration is used here. To customize the configuration, please see the SDK API documentation.
    TransferConfig transferConfig = new TransferConfig.Builder().build();
    // Initialize TransferManager
    TransferManager transferManager = new TransferManager(cosXmlService,
    transferConfig);
    
    // Bucket name in the format of BucketName-APPID (APPID is required), which can be viewed in the COS console at https://console.tencentcloud.com/cos5/bucket
    String bucket = "examplebucket-1250000000";
    String cosPath = "exampleobject"; // Location identifier of the object in the bucket, i.e., the object key
    // Path of the local directory
    String savePathDir = context.getExternalCacheDir().toString();
    // File name saved locally. If not specified (null), it will be the same as the COS file name
    String savedFileName = "exampleobject";
    
    GetObjectRequest getObjectRequest = new GetObjectRequest(bucket, cosPath, savePathDir, savedFileName);
    // Set the bandwidth limit for a single URL in bit/s. In the example, the limit is set to 1 Mbit/s
    getObjectRequest.setTrafficLimit(1024 * 1024 * 8);
    
    Context applicationContext = context.getApplicationContext(); // application
    // context
    COSXMLDownloadTask cosxmlDownloadTask =
    transferManager.download(applicationContext, getObjectRequest);
    
    // Set the download progress callback
    cosxmlDownloadTask.setCosXmlProgressListener(new CosXmlProgressListener() {
    @Override
    public void onProgress(long complete, long target) {
    // todo Do something to update progress...
    }
    });
    // Set the response callback
    cosxmlDownloadTask.setCosXmlResultListener(new CosXmlResultListener() {
    @Override
    public void onSuccess(CosXmlRequest request, CosXmlResult result) {
    COSXMLDownloadTask.COSXMLDownloadTaskResult downloadTaskResult =
    (COSXMLDownloadTask.COSXMLDownloadTaskResult) result;
    }
    
    // If you use the Kotlin language to call this, please note that the exception in the callback method is nullable; otherwise, the onFail method will not be called back, that is:
    // clientException is of type CosXmlClientException? and serviceException is of type CosXmlServiceException?
    @Override
    public void onFail(CosXmlRequest request,
    @Nullable CosXmlClientException clientException,
    @Nullable CosXmlServiceException serviceException) {
    if (clientException != null) {
    clientException.printStackTrace();
    } else {
    serviceException.printStackTrace();
    }
    }
    });
    // Set the job status callback to view the job progress
    cosxmlDownloadTask.setTransferStateListener(new TransferStateListener() {
    @Override
    public void onStateChanged(TransferState state) {
    // todo notify transfer state
    }
    });
    Note:
    For more samples, please visit GitHub.
    Contact Us

    Contact our sales team or business advisors to help your business.

    Technical Support

    Open a ticket if you're looking for further assistance. Our Ticket is 7x24 avaliable.

    7x24 Phone Support