全部产品
Search
文档中心

Object Storage Service:Pembatasan bandwidth koneksi tunggal (Java SDK V1)

更新时间:Nov 27, 2025

Topik ini menjelaskan cara menambahkan parameter pada permintaan unggah atau unduh objek untuk mengatur batas bandwidth unggah atau unduh, sehingga memastikan ketersediaan bandwidth yang cukup bagi aplikasi lain.

Catatan penggunaan

  • Pada topik ini, digunakan titik akhir publik wilayah China (Hangzhou). Untuk mengakses OSS dari layanan Alibaba Cloud lainnya di wilayah yang sama, gunakan titik akhir internal. Untuk informasi selengkapnya mengenai wilayah dan titik akhir yang didukung, lihat Wilayah dan titik akhir.

  • Pada topik ini, kredensial akses diperoleh dari variabel lingkungan. Untuk informasi lebih lanjut tentang cara mengonfigurasi kredensial akses, lihat Konfigurasi kredensial akses.

  • Pada topik ini, instans OSSClient dibuat menggunakan titik akhir OSS. Jika Anda ingin membuat instans OSSClient menggunakan nama domain kustom atau Security Token Service (STS), lihat Contoh konfigurasi untuk skenario umum.

Konfigurasi pembatasan bandwidth koneksi tunggal untuk unggah dan unduh simple

Kode contoh berikut menunjukkan cara mengonfigurasi pembatasan bandwidth koneksi tunggal untuk unggah dan unduh simple:

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.GetObjectRequest;
import com.aliyun.oss.model.PutObjectRequest;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;

public class Demo {
    public static void main(String[] args) throws Throwable {
        // Pada contoh ini, titik akhir wilayah China (Hangzhou) digunakan. Tentukan titik akhir aktual Anda. 
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // Peroleh kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, 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 path lengkap objek. Jangan sertakan nama bucket dalam path lengkap. Contoh: exampledir/exampleobject.txt. 
        String objectName = "exampledir/exampleobject.txt";
        // Tentukan path lengkap file lokal yang ingin Anda unggah. Contoh: D:\\localpath\\examplefile.txt. 
        // Jika Anda tidak menentukan path file lokal, file lokal akan diunggah dari path proyek tempat program contoh berada. 
        String localFileName = "D:\\localpath\\examplefile.txt";
        // Tentukan path lengkap tujuan unduhan objek. Jika file dengan nama yang sama sudah ada, objek yang diunduh akan menimpa file tersebut. Jika tidak, objek yang diunduh akan disimpan di path tersebut. 
        // Jika Anda tidak menentukan path untuk objek yang diunduh, objek tersebut akan disimpan di path proyek tempat program contoh berada. 
        String downLoadFileName = "D:\\localpath\\exampleobject.txt";

        // Atur batas bandwidth menjadi 100 KB/s. 
        int limitSpeed = 100 * 1024 * 8;
        // Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou. 
        String region = "cn-hangzhou";

        // Buat instans OSS Client. 
        // Panggil metode shutdown untuk melepaskan sumber daya terkait saat 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 {
            // Konfigurasikan pembatasan bandwidth untuk unggah objek. 
            InputStream inputStream = new FileInputStream(localFileName);
            PutObjectRequest PutObjectRequest = new PutObjectRequest(bucketName, objectName, inputStream);
            PutObjectRequest.setTrafficLimit(limitSpeed);
            ossClient.putObject(PutObjectRequest);

            // Konfigurasikan pembatasan bandwidth untuk unduh objek. 
            GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName, objectName);
            getObjectRequest.setTrafficLimit(limitSpeed);
            File localFile = new File(downLoadFileName);
            ossClient.getObject(getObjectRequest, localFile);
        } catch (OSSException oe) {
            System.out.println("Terjadi OSSException, yang berarti permintaan Anda berhasil mencapai OSS, "
                    + "tetapi ditolak dengan tanggapan kesalahan karena suatu alasan.");
            System.out.println("Pesan Kesalahan:" + oe.getErrorMessage());
            System.out.println("Kode Kesalahan:" + oe.getErrorCode());
            System.out.println("ID Permintaan:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Terjadi ClientException, yang berarti client 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();
            }
        }
    }
}

Konfigurasi pembatasan bandwidth koneksi tunggal untuk unggah multi-bagian

Kode berikut menunjukkan cara mengonfigurasi pembatasan bandwidth koneksi tunggal untuk unggah multi-bagian:

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.*;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

public class DemoApi2 {

    public static void main(String[] args) throws Exception {
        // Pada contoh ini, titik akhir wilayah China (Hangzhou) digunakan. Tentukan titik akhir aktual Anda. 
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // Peroleh kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, 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 path lengkap objek. Contoh: exampledir/exampleobject.txt. Jangan sertakan nama bucket dalam path lengkap. 
        String objectName = "exampledir/exampleobject.txt";
        // Atur batas bandwidth menjadi 100 KB/s. 
        int limitSpeed = 100 * 1024 * 8;
        // Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou. 
        String region = "cn-hangzhou";

        // Buat instans OSS Client. 
        // Panggil metode shutdown untuk melepaskan sumber daya terkait saat 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 {
            // Buat objek InitiateMultipartUploadRequest. 
            InitiateMultipartUploadRequest request = new InitiateMultipartUploadRequest(bucketName, objectName);


            // Inisialisasi tugas unggah multi-bagian. 
            InitiateMultipartUploadResult upresult = ossClient.initiateMultipartUpload(request);
            // Peroleh upload ID, yang secara unik mengidentifikasi tugas unggah multi-bagian. Anda dapat menggunakan upload ID untuk melakukan operasi terkait, seperti membatalkan dan menanyakan status tugas unggah multi-bagian. 
            String uploadId = upresult.getUploadId();

            // partETags adalah kumpulan PartETags. PartETag terdiri dari nomor bagian dan ETag dari bagian yang diunggah 
            List<PartETag> partETags =  new ArrayList<PartETag>();
            // Tentukan ukuran setiap bagian, yang digunakan untuk menghitung jumlah bagian objek. Satuan: byte. 
            final long partSize = 1 * 1024 * 1024L;   // Atur ukuran bagian menjadi 1 MB. 

            // Tentukan path lengkap file lokal yang ingin Anda unggah. Secara default, jika Anda tidak menentukan path lengkap file lokal, file lokal akan diunggah dari path proyek tempat program contoh berada. 
            final File sampleFile = new File("D:\\localpath\\examplefile.txt");
            long fileLength = sampleFile.length();
            int partCount = (int) (fileLength / partSize);
            if (fileLength % partSize != 0) {
                partCount++;
            }
            // Unggah semua bagian. 
            for (int i = 0; i < partCount; i++) {
                long startPos = i * partSize;
                long curPartSize = (i + 1 == partCount) ? (fileLength - startPos) : partSize;
                InputStream instream = new FileInputStream(sampleFile);
                // Lewati bagian yang sudah diunggah. 
                instream.skip(startPos);
                UploadPartRequest uploadPartRequest = new UploadPartRequest();
                uploadPartRequest.setBucketName(bucketName);
                uploadPartRequest.setKey(objectName);
                uploadPartRequest.setUploadId(uploadId);
                uploadPartRequest.setInputStream(instream);
                // Tentukan ukuran setiap bagian. Setiap bagian kecuali bagian terakhir harus sama dengan atau lebih besar dari 100 KB. 
                uploadPartRequest.setPartSize(curPartSize);
                // Tentukan nomor bagian. Setiap bagian memiliki nomor bagian. Nomor berkisar dari 1 hingga 10000. Jika nomor yang ditentukan berada di luar rentang tersebut, OSS akan mengembalikan kode kesalahan InvalidArgument. 
                uploadPartRequest.setPartNumber( i + 1);
                // Tentukan batas bandwidth.
                uploadPartRequest.setTrafficLimit(limitSpeed);
                // Bagian tidak harus diunggah secara berurutan. Mereka dapat diunggah dari client OSS yang berbeda. OSS akan mengurutkan bagian berdasarkan nomor bagian dan menggabungkannya menjadi satu objek utuh. 
                UploadPartResult uploadPartResult = ossClient.uploadPart(uploadPartRequest);
                // Setiap kali sebuah bagian diunggah, OSS mengembalikan hasil yang berisi PartETag. PartETags disimpan dalam partETags. 
                partETags.add(uploadPartResult.getPartETag());
            }


            // Buat objek CompleteMultipartUploadRequest. 
            // Saat Anda memanggil operasi CompleteMultipartUpload, Anda harus menyediakan semua PartETags yang valid. Setelah OSS menerima PartETags, OSS akan memverifikasi semua bagian satu per satu. Setelah semua bagian diverifikasi, OSS akan menggabungkan bagian-bagian tersebut menjadi satu objek utuh. 
            CompleteMultipartUploadRequest completeMultipartUploadRequest =
                    new CompleteMultipartUploadRequest(bucketName, objectName, uploadId, partETags);

            // Selesaikan tugas unggah multi-bagian. 
            CompleteMultipartUploadResult completeMultipartUploadResult = ossClient.completeMultipartUpload(completeMultipartUploadRequest);
            System.out.println(completeMultipartUploadResult.getETag());
        } catch (OSSException oe) {
            System.out.println("Terjadi OSSException, yang berarti permintaan Anda berhasil mencapai OSS, "
                    + "tetapi ditolak dengan tanggapan kesalahan karena suatu alasan.");
            System.out.println("Pesan Kesalahan:" + oe.getErrorMessage());
            System.out.println("Kode Kesalahan:" + oe.getErrorCode());
            System.out.println("ID Permintaan:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Terjadi ClientException, yang berarti client 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();
            }
        }
    }
}

Konfigurasi pembatasan bandwidth untuk unggah dan unduh yang menggunakan URL yang ditandatangani

Kode contoh berikut menunjukkan cara mengonfigurasi pembatasan bandwidth koneksi tunggal saat menggunakan URL yang ditandatangani untuk mengunggah atau mengunduh objek:

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 {
        // Pada contoh ini, titik akhir wilayah China (Hangzhou) digunakan. Tentukan titik akhir aktual Anda. 
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // Peroleh kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, 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 path lengkap objek. Jangan sertakan nama bucket dalam path lengkap. Contoh: exampledir/exampleobject.txt. 
        String objectName = "exampledir/exampleobject.txt";

        // Tentukan path lengkap file lokal yang ingin Anda unggah. Contoh: D:\\localpath\\examplefile.txt. 
        // Jika Anda tidak menentukan path file lokal, file lokal akan diunggah dari path proyek tempat program contoh berada. 
        String localFileName = "D:\\localpath\\examplefile.txt";

        // Tentukan path lengkap tujuan unduhan objek. Jika file dengan nama yang sama sudah ada, objek yang diunduh akan menimpa file tersebut. Jika tidak, objek yang diunduh akan disimpan di path tersebut. 
        // Jika Anda tidak menentukan path untuk objek yang diunduh, objek tersebut akan disimpan di path proyek tempat program contoh berada. 
        String downLoadFileName = "D:\\localpath\\exampleobject.txt";

        // Atur batas bandwidth menjadi 100 KB/s. 
        int limitSpeed = 100 * 1024 * 8;
        // Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou. 
        String region = "cn-hangzhou";

        // Buat instans OSS Client. 
        // Panggil metode shutdown untuk melepaskan sumber daya terkait saat 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 atur 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 unduh objek dan atur 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 unduh objek. 
            GetObjectRequest getObjectRequest =  new GetObjectRequest(signedUrl, null);
            ossClient.getObject(getObjectRequest, new File(downLoadFileName));
        } catch (OSSException oe) {
            System.out.println("Terjadi OSSException, yang berarti permintaan Anda berhasil mencapai OSS, "
                    + "tetapi ditolak dengan tanggapan kesalahan karena suatu alasan.");
            System.out.println("Pesan Kesalahan:" + oe.getErrorMessage());
            System.out.println("Kode Kesalahan:" + oe.getErrorCode());
            System.out.println("ID Permintaan:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Terjadi ClientException, yang berarti client 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();
            }
        }
    }
}

Referensi

Untuk kode contoh lengkap mengenai pembatasan bandwidth koneksi tunggal, kunjungi GitHub.