Mengakses file (objek) di Object Storage Service (OSS) dapat mengonsumsi sejumlah besar bandwidth. Pada klien di mana pembatasan trafik sulit dikontrol, hal ini dapat mempengaruhi aplikasi lainnya. Untuk menghindari masalah ini, Anda dapat menggunakan fitur pembatasan bandwidth koneksi tunggal yang disediakan oleh OSS untuk mengontrol trafik selama operasi seperti unggah dan unduh file, sehingga memastikan bandwidth jaringan yang cukup untuk aplikasi lainnya.
Catatan penggunaan
Sertakan parameter x-oss-traffic-limit dalam permintaan PutObject, AppendObject, PostObject, CopyObject, UploadPart, UploadPartCopy, dan GetObject, serta tentukan nilai pembatasan. Nilai tersebut harus berada dalam rentang 819.200 hingga 838.860.800. Satuan adalah bit/detik.
Batasi permintaan klien
Anda hanya dapat membatasi permintaan klien menggunakan kit pengembangan perangkat lunak (SDK). Kode berikut memberikan contoh cara membatasi permintaan unggah atau unduhan menggunakan SDK umum. Untuk contoh kode yang menggunakan SDK lainnya, lihat Ikhtisar SDK.
Pembatasan unggah dan unduhan sederhana
Pembatasan unggah multipart
Batasi bandwidth menggunakan URL file
Untuk file dengan izin baca-publik atau baca-tulis-publik, Anda dapat menambahkan parameter pembatasan x-oss-traffic-limit=<value> ke URL file untuk membatasi akses. Misalnya, URL https://examplebucket.oss-cn-hangzhou.aliyuncs.com/video.mp4?x-oss-traffic-limit=819200 menentukan bahwa kecepatan unduh untuk file video.mp4 dibatasi hingga 100 KB/detik. Gambar berikut menunjukkan efek pembatasan:
Batasi bandwidth menggunakan URL yang ditandatangani
Saat menggunakan SDK untuk menghasilkan URL yang ditandatangani guna mengakses file pribadi, Anda harus menyertakan parameter pembatasan dalam perhitungan tanda tangan. Kode berikut memberikan contoh cara menambahkan parameter pembatasan ke URL yang ditandatangani menggunakan SDK umum. Untuk contoh kode yang menggunakan SDK lainnya, lihat Ikhtisar SDK.
import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.GeneratePresignedUrlRequest;
import com.aliyun.oss.model.GetObjectRequest;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.net.URL;
import java.util.Date;
public class Demo {
public static void main(String[] args) throws Throwable {
// Dalam contoh ini, endpoint wilayah Tiongkok (Hangzhou) digunakan. Tentukan endpoint aktual Anda.
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode sampel, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// Tentukan nama bucket. Contoh: examplebucket.
String bucketName = "examplebucket";
// Tentukan jalur lengkap objek. Jangan sertakan nama bucket dalam jalur lengkap. Contoh: exampledir/exampleobject.txt.
String objectName = "exampledir/exampleobject.txt";
// Tentukan jalur lengkap file lokal yang ingin Anda unggah. Contoh: D:\\localpath\\examplefile.txt.
// Jika Anda tidak menentukan jalur file lokal, file lokal akan diunggah dari jalur proyek tempat program sampel berada.
String localFileName = "D:\\localpath\\examplefile.txt";
// Tentukan jalur lengkap ke mana Anda ingin mengunduh objek. Jika file dengan nama yang sama sudah ada, objek yang diunduh akan menimpa file tersebut. Jika tidak, objek yang diunduh akan disimpan di jalur tersebut.
// Jika Anda tidak menentukan jalur untuk objek yang diunduh, objek yang diunduh akan disimpan ke jalur proyek tempat program sampel berada.
String downLoadFileName = "D:\\localpath\\exampleobject.txt";
// Setel batas bandwidth menjadi 100 KB/detik.
int limitSpeed = 100 * 1024 * 8;
// Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah Tiongkok (Hangzhou), setel wilayah menjadi cn-hangzhou.
String region = "cn-hangzhou";
// Buat instance OSS Client.
// Panggil metode shutdown untuk melepaskan sumber daya terkait ketika OSS Client tidak lagi digunakan.
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
// Hasilkan URL yang ditandatangani yang mencakup parameter pembatasan bandwidth untuk unggah objek dan setel periode validitas URL menjadi 60 detik.
Date date = new Date();
date.setTime(date.getTime() + 60 * 1000);
GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucketName, objectName, HttpMethod.PUT);
request.setExpiration(date);
request.setTrafficLimit(limitSpeed);
URL signedUrl = ossClient.generatePresignedUrl(request);
System.out.println("put object url" + signedUrl);
// Konfigurasikan pembatasan bandwidth untuk unggah objek.
InputStream inputStream = new FileInputStream(localFileName);
ossClient.putObject(signedUrl, inputStream, -1, null, true);
// Hasilkan URL yang ditandatangani yang mencakup parameter pembatasan bandwidth untuk unduhan objek dan setel periode validitas URL menjadi 60 detik.
date = new Date();
date.setTime(date.getTime() + 60 * 1000);
request = new GeneratePresignedUrlRequest(bucketName, objectName, HttpMethod.GET);
request.setExpiration(date);
request.setTrafficLimit(limitSpeed);
signedUrl = ossClient.generatePresignedUrl(request);
System.out.println("get object url" + signedUrl);
// Konfigurasikan pembatasan bandwidth untuk unduhan objek.
GetObjectRequest getObjectRequest = new GetObjectRequest(signedUrl, null);
ossClient.getObject(getObjectRequest, new File(downLoadFileName));
} catch (OSSException oe) {
System.out.println("Tangkap OSSException, yang berarti permintaan Anda mencapai OSS, "
+ "tetapi ditolak dengan respons kesalahan karena alasan tertentu.");
System.out.println("Pesan Kesalahan:" + oe.getErrorMessage());
System.out.println("Kode Kesalahan:" + oe.getErrorCode());
System.out.println("ID Permintaan:" + oe.getRequestId());
System.out.println("ID Host:" + oe.getHostId());
} catch (ClientException ce) {
System.out.println("Tangkap ClientException, yang berarti klien mengalami "
+ "masalah internal serius saat mencoba berkomunikasi dengan OSS, "
+ "seperti tidak dapat mengakses jaringan.");
System.out.println("Pesan Kesalahan:" + 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\Credentials\EnvironmentVariableCredentialsProvider;
use OSS\OssClient;
use OSS\Core\OssException;
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode sampel ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur.
$provider = new EnvironmentVariableCredentialsProvider();
// Setel yourEndpoint ke Endpoint wilayah tempat bucket berada. Misalnya, untuk wilayah Tiongkok (Hangzhou), setel Endpoint ke https://oss-cn-hangzhou.aliyuncs.com.
$endpoint = "yourEndpoint";
// Tentukan nama bucket. Contoh: examplebucket.
$bucket= "examplebucket";
// Tentukan jalur lengkap objek. Contoh: exampledir/exampleobject.txt. Jalur lengkap tidak boleh berisi nama bucket.
$object = "exampledir/exampleobject.txt";
$config = array(
"provider" => $provider,
"endpoint" => $endpoint,
"signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
"region"=> "cn-hangzhou"
);
$ossClient = new OssClient($config);
// Batasi bandwidth menjadi 100 KB/detik, yaitu 819200 bit/detik.
$options = array(
OssClient::OSS_TRAFFIC_LIMIT => 819200,
);
// Buat URL yang ditandatangani untuk unggahan dengan pembatasan. URL tersebut valid selama 60 detik.
$timeout = 60;
$signedUrl = $ossClient->signUrl($bucket, $object, $timeout, "PUT", $options);
print($signedUrl);
// Buat URL yang ditandatangani untuk unduhan dengan pembatasan. URL tersebut valid selama 120 detik.
$timeout = 120;
$signedUrl = $ossClient->signUrl($bucket, $object, $timeout, "GET", $options);
print($signedUrl);# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
from oss2.models import OSS_TRAFFIC_LIMIT
# Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode sampel, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# Tentukan endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah Tiongkok (Hangzhou), setel endpoint ke https://oss-cn-hangzhou.aliyuncs.com.
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# Tentukan ID wilayah yang sesuai dengan endpoint. Contoh: cn-hangzhou. Parameter ini diperlukan jika Anda menggunakan algoritma tanda tangan V4.
region = "cn-hangzhou"
# Tentukan nama bucket.
bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region)
# Tentukan jalur lengkap objek. Jangan sertakan nama bucket dalam jalur lengkap. Contoh: exampledir/exampleobject.txt.
object_name = 'exampledir/exampleobject.txt'
# Tentukan jalur lengkap file lokal yang ingin Anda unggah. Contoh: D:\\localpath\\examplefile.txt. Secara default, jika Anda tidak menentukan jalur file lokal, file lokal akan diunggah dari jalur proyek tempat program sampel berada.
local_file_name = 'D:\\localpath\\examplefile.txt'
# Tentukan jalur lokal ke mana Anda ingin mengunduh objek. Jika file dengan nama yang sama sudah ada, objek yang diunduh akan menimpa file tersebut. Jika tidak ada file dengan nama yang sama, objek yang diunduh akan disimpan di jalur tersebut.
# Jika Anda tidak menentukan jalur untuk objek yang diunduh, objek yang diunduh akan disimpan ke jalur proyek tempat program sampel berada.
down_file_name = 'D:\\localpath\\exampleobject.txt'
# Konfigurasikan parameter params untuk menyetel batas bandwidth menjadi 100 KB/detik, yaitu sama dengan 819.200 bit/detik.
limit_speed = (100 * 1024 * 8)
params = dict()
params[OSS_TRAFFIC_LIMIT] = str(limit_speed)
# Hasilkan URL yang ditandatangani yang mencakup parameter pembatasan bandwidth untuk unggah objek dan setel periode validitas URL menjadi 60 detik.
url = bucket.sign_url('PUT', object_name, 60, params=params)
print('put object url:', url)
# Konfigurasikan pembatasan bandwidth untuk unggah objek.
result = bucket.put_object_with_url_from_file(url, local_file_name)
print('status respons http:', result.status)
# Hasilkan URL yang ditandatangani yang mencakup parameter pembatasan bandwidth untuk unduhan objek dan setel periode validitas URL menjadi 60 detik.
url = bucket.sign_url('GET', object_name, 60, params=params)
print('get object url:', url)
# Konfigurasikan pembatasan bandwidth untuk unduhan objek.
result = bucket.get_object_with_url_to_file(url, down_file_name)
print('status respons http:', result.status)using System.Text;
using Aliyun.OSS;
using Aliyun.OSS.Common;
// Tentukan endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah Tiongkok (Hangzhou), setel endpoint ke https://oss-cn-hangzhou.aliyuncs.com.
var endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode sampel, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// Tentukan nama bucket. Contoh: examplebucket.
var bucketName = "examplebucket";
// Tentukan jalur lengkap objek. Jangan sertakan nama bucket dalam jalur lengkap. Contoh: exampledir/exampleobject.txt.
var objectName = "exampledir/exampleobject.txt";
var objectContent = "More than just cloud.";
var downloadFilename = "D:\\localpath\\examplefile.txt";
// Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah Tiongkok (Hangzhou), setel wilayah menjadi cn-hangzhou.
const string region = "cn-hangzhou";
// Buat instance ClientConfiguration dan modifikasi parameter sesuai kebutuhan.
var conf = new ClientConfiguration();
// Gunakan algoritma tanda tangan V4.
conf.SignatureVersion = SignatureVersion.V4;
// Buat instance OSSClient.
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
client.SetRegion(region);
try
{
// Hasilkan URL yang ditandatangani untuk mengunggah objek.
var generatePresignedUriRequest = new GeneratePresignedUriRequest(bucketName, objectName, SignHttpMethod.Put)
{
Expiration = DateTime.Now.AddHours(1),
};
// Setel batas bandwidth menjadi 100 KB/detik, yaitu sama dengan 819.200 bit/detik.
generatePresignedUriRequest.AddQueryParam("x-oss-traffic-limit", "819200");
var signedUrl = client.GeneratePresignedUri(generatePresignedUriRequest);
// Gunakan URL yang ditandatangani untuk mengunggah objek.
var buffer = Encoding.UTF8.GetBytes(objectContent);
using (var ms = new MemoryStream(buffer))
{
client.PutObject(signedUrl, ms);
}
Console.WriteLine("Unggah objek dengan tanda tangan berhasil. {0} ", signedUrl.ToString());
var metadata = client.GetObjectMetadata(bucketName, objectName);
var etag = metadata.ETag;
// Hasilkan URL yang ditandatangani untuk mengunduh objek.
// Setel batas bandwidth menjadi 100 KB/detik, yaitu sama dengan 819.200 bit/detik.
var req = new GeneratePresignedUriRequest(bucketName, objectName, SignHttpMethod.Get);
req.AddQueryParam("x-oss-traffic-limit", "819200");
var uri = client.GeneratePresignedUri(req);
// Gunakan URL yang ditandatangani untuk mengunduh objek.
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("Unduh objek dengan tanda tangan berhasil. {0} ", uri.ToString());
}
catch (Exception ex)
{
Console.WriteLine("Unggah objek gagal, {0}", ex.Message);
}#include <alibabacloud/oss/OssClient.h>
#include <fstream>
using namespace AlibabaCloud::OSS;
int main(void)
{
/* Inisialisasi informasi tentang akun yang digunakan untuk mengakses OSS. */
/* Tentukan endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah Tiongkok (Hangzhou), setel endpoint ke https://oss-cn-hangzhou.aliyuncs.com. */
std::string Endpoint = "yourEndpoint";
/* Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah Tiongkok (Hangzhou), setel wilayah menjadi cn-hangzhou.*/
std::string Region = "yourRegion";
/* Tentukan nama bucket. Contoh: examplebucket. */
std::string BucketName = "examplebucket";
/* Tentukan jalur lengkap objek. Jangan sertakan nama bucket dalam jalur lengkap objek. Contoh: exampledir/exampleobject.txt. */
std::string ObjectName = "exampledir/exampleobject.txt";
/* Inisialisasi sumber daya, seperti sumber daya jaringan. */
InitializeSdk();
ClientConfiguration conf;
conf.signatureVersion = SignatureVersionType::V4;
/* Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode sampel, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi. */
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
client.SetRegion(Region);
/* Setel periode validitas URL yang ditandatangani menjadi 32.400 detik. */
std::time_t expires = std::time(nullptr) + 1200;
/* Hasilkan URL yang ditandatangani yang digunakan untuk mengunggah objek. */
GeneratePresignedUrlRequest putrequest(BucketName, ObjectName, Http::Put);
putrequest.setExpires(expires);
/* Setel kecepatan maksimum untuk mengunggah objek menjadi 100 KB/detik. */
putrequest.setTrafficLimit(819200);
auto genOutcome = client.GeneratePresignedUrl(putrequest);
std::shared_ptr<std::iostream> content = std::make_shared<std::stringstream>();
*content << "test cpp sdk";
/* Tampilkan URL unggah yang ditandatangani. */
std::cout << "Signed upload URL:" << genOutcome.result() << std::endl;
/* Gunakan URL yang ditandatangani untuk mengunggah objek. */
auto outcome = client.PutObjectByUrl(genOutcome.result(), content);
/* Hasilkan URL yang ditandatangani yang digunakan untuk mengunduh objek. */
GeneratePresignedUrlRequest getrequest(BucketName, ObjectName, Http::Get);
getrequest.setExpires(expires);
/* Setel kecepatan maksimum untuk mengunduh objek menjadi 100 KB/detik. */
getrequest.setTrafficLimit(819200);
genOutcome = client.GeneratePresignedUrl(getrequest);
/* Tampilkan URL unduhan yang ditandatangani. */
std::cout << "Signed download URL:" << genOutcome.result() << std::endl;
/* Gunakan URL yang ditandatangani untuk mengunduh objek. */
auto goutcome = client.GetObjectByUrl(genOutcome.result());
/* Lepaskan sumber daya, seperti sumber daya jaringan. */
ShutdownSdk();
return 0;
}