All Products
Search
Document Center

Object Storage Service:Hapus objek (OSS SDK for Java 1.0)

Last Updated:Mar 19, 2026

Topik ini menjelaskan cara menghapus satu objek, beberapa objek, atau objek yang namanya mengandung awalan tertentu dari bucket Object Storage Service (OSS) yang telah diaktifkan fitur Pengendalian versi.

Catatan penggunaan

  • Topik ini menggunakan titik akhir publik wilayah China (Hangzhou). Untuk mengakses OSS dari layanan Alibaba Cloud lainnya dalam wilayah yang sama, gunakan titik akhir internal. Untuk detail wilayah dan titik akhir yang didukung, lihat Regions and endpoints.

  • Pada topik ini, kredensial akses diperoleh dari variabel lingkungan. Untuk informasi selengkapnya, lihat Configure access credentials.

  • Topik ini menunjukkan cara membuat instans OSSClient dengan titik akhir OSS. Untuk konfigurasi alternatif, seperti menggunakan domain kustom atau autentikasi dengan kredensial dari Security Token Service (STS), lihat Client configuration.

  • Setelah Pengendalian versi diaktifkan, Anda harus memiliki izin oss:DeleteObjectVersion untuk menghapus objek. Untuk informasi selengkapnya, lihat Attach a custom policy to a RAM user.

Operasi penghapusan pada bucket yang diaktifkan Pengendalian versi

Perilaku penghapusan pada bucket yang diaktifkan Pengendalian versi adalah sebagai berikut:

  • Menghapus tanpa menentukan ID versi (penghapusan temporary):

    Jika Anda menghapus objek tanpa menentukan ID versinya, OSS tidak akan menghapus versi terkini objek tersebut. Sebagai gantinya, OSS akan menambahkan penanda hapus sebagai versi terbaru. Saat Anda memanggil GetObject, OSS mendeteksi bahwa versi terkini adalah penanda hapus dan mengembalikan 404 Not Found. Tanggapan tersebut juga menyertakan header: x-oss-delete-marker = true dan ID versi dari penanda hapus baru dalam x-oss-version-id.

    Jika x-oss-delete-marker bernilai true, ID versi yang dikembalikan dalam x-oss-version-id merujuk pada penanda hapus.

  • Menghapus dengan menentukan ID versi (penghapusan permanen):

    Jika Anda menentukan ID versi saat menghapus objek, OSS akan menghapus permanen versi tersebut berdasarkan parameter params versionId. Untuk menghapus versi dengan ID "null", tambahkan params['versionId'] = "null" ke params. OSS memperlakukan string "null" sebagai ID versi dan menghapus versi objek dengan ID "null".

Hapus satu file

Contoh berikut menunjukkan cara menghapus permanen atau temporary satu objek.

  • Penghapusan permanen

    Kode berikut menghapus permanen objek dengan menentukan ID versinya:

    import com.aliyun.oss.*;
    import com.aliyun.oss.common.auth.*;
    import com.aliyun.oss.common.comm.SignVersion;
    
    public class Demo {
        public static void main(String[] args) throws Exception {
            // Pada contoh ini, digunakan titik akhir wilayah China (Hangzhou). 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. 
            String objectName = "exampledir/object";
            String versionId  = "CAEQMxiBgICAof2D0BYiIDJhMGE3N2M1YTI1NDQzOGY5NTkyNTI3MGYyMzJm****";
            // Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou.
            String region = "cn-hangzhou";
    
            // Buat instans OSSClient. 
            // Panggil metode shutdown untuk melepas sumber daya ketika OSSClient 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 {
                // Hapus versi objek yang ditentukan. 
                ossClient.deleteVersion(bucketName, objectName , versionId);
            } catch (OSSException oe) {
                System.out.println("Terjadi OSSException, yang berarti permintaan Anda sampai ke OSS, "
                        + "tetapi ditolak dengan tanggapan error karena suatu alasan.");
                System.out.println("Pesan Error:" + oe.getErrorMessage());
                System.out.println("Kode Error:" + oe.getErrorCode());
                System.out.println("ID Permintaan:" + oe.getRequestId());
                System.out.println("ID Host:" + oe.getHostId());
            } catch (ClientException ce) {
                System.out.println("Terjadi ClientException, yang berarti klien mengalami "
                        + "masalah internal serius saat mencoba berkomunikasi dengan OSS, "
                        + "seperti tidak dapat mengakses jaringan.");
                System.out.println("Pesan Error:" + ce.getMessage());
            } finally {
                if (ossClient != null) {
                    ossClient.shutdown();
                }
            }
        }
    }
  • Penghapusan temporary

    Kode berikut menghapus temporary objek tanpa menentukan ID versi:

    import com.aliyun.oss.*;
    import com.aliyun.oss.common.auth.*;
    import com.aliyun.oss.common.comm.SignVersion;
    
    public class Demo {
        public static void main(String[] args) throws Exception {
            // Pada contoh ini, digunakan titik akhir wilayah China (Hangzhou). 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. 
            String objectName = "exampledir/object";
            // Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou.
            String region = "cn-hangzhou";
    
            // Buat instans OSSClient. 
            // Panggil metode shutdown untuk melepas sumber daya ketika OSSClient 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 {
                // Hapus objek secara temporary. Penanda hapus ditambahkan ke objek. 
                ossClient.deleteObject(bucketName, objectName);
            } catch (OSSException oe) {
                System.out.println("Terjadi OSSException, yang berarti permintaan Anda sampai ke OSS, "
                        + "tetapi ditolak dengan tanggapan error karena suatu alasan.");
                System.out.println("Pesan Error:" + oe.getErrorMessage());
                System.out.println("Kode Error:" + oe.getErrorCode());
                System.out.println("ID Permintaan:" + oe.getRequestId());
                System.out.println("ID Host:" + oe.getHostId());
            } catch (ClientException ce) {
                System.out.println("Terjadi ClientException, yang berarti klien mengalami "
                        + "masalah internal serius saat mencoba berkomunikasi dengan OSS, "
                        + "seperti tidak dapat mengakses jaringan.");
                System.out.println("Pesan Error:" + ce.getMessage());
            } finally {
                if (ossClient != null) {
                    ossClient.shutdown();
                }
            }
        }
    }

Hapus beberapa objek

Contoh berikut menunjukkan cara menghapus permanen atau temporary beberapa objek.

  • Penghapusan permanen

    Kode berikut menghapus permanen beberapa objek atau penanda hapus dengan menentukan ID versinya:

    import com.aliyun.oss.*;
    import com.aliyun.oss.common.auth.*;
    import com.aliyun.oss.common.comm.SignVersion;
    import com.aliyun.oss.model.DeleteVersionsRequest;
    import com.aliyun.oss.model.DeleteVersionsResult;
    import java.net.URLDecoder;
    import java.util.ArrayList;
    import java.util.List;
    
    public class Demo {
        public static void main(String[] args) throws Exception {
            // Pada contoh ini, digunakan titik akhir wilayah China (Hangzhou). 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. 
            String objectName = "exampledir/object";
            String object2Name = "exampledir/object2";
            String yourObjectNameVersionId  = "CAEQMxiBgICAof2D0BYiIDJhMGE3N2M1YTI1NDQzOGY5NTkyNTI3MGYyMzJm****";
            String yourObject2DelMarkerNameVersionId  = "MGE3N2M1YgICAof2D0BYiID3N2M1YTITI1NDQzOGY5NTN2M1YTI1NDQz****";
    
            // Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou.
            String region = "cn-hangzhou";
    
            // Buat instans OSSClient.
            // Panggil metode shutdown untuk melepas sumber daya ketika OSSClient 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 {
                // Hapus objek atau penanda hapus yang memiliki ID versi tertentu. 
                List<DeleteVersionsRequest.KeyVersion> keyVersionsList = new ArrayList<DeleteVersionsRequest.KeyVersion>();
                keyVersionsList.add(new DeleteVersionsRequest.KeyVersion(objectName,yourObjectNameVersionId));
                keyVersionsList.add(new DeleteVersionsRequest.KeyVersion(object2Name,yourObject2DelMarkerNameVersionId));
                DeleteVersionsRequest delVersionsRequest = new DeleteVersionsRequest(bucketName);
                delVersionsRequest.setKeys(keyVersionsList);
                // Kirim permintaan deleteVersions. 
                DeleteVersionsResult delVersionsResult = ossClient.deleteVersions(delVersionsRequest);
    
                // Lihat hasil penghapusan. 
                for (DeleteVersionsResult.DeletedVersion delVer : delVersionsResult.getDeletedVersions()) {
                    String keyName = URLDecoder.decode(delVer.getKey(), "UTF-8");
                    String keyVersionId = delVer.getVersionId();
                    String keyDelMarkerId = delVer.getDeleteMarkerVersionId();
                    System.out.println("hapus key: " + keyName);
                    System.out.println("hapus key versionId: " + keyVersionId);
                    if(keyDelMarkerId != null && keyDelMarkerId.length() != 0){
                        System.out.println("hapus key del_marker versionId: " + keyDelMarkerId);
                    }
                }
            } catch (OSSException oe) {
                System.out.println("Terjadi OSSException, yang berarti permintaan Anda sampai ke OSS, "
                        + "tetapi ditolak dengan tanggapan error karena suatu alasan.");
                System.out.println("Pesan Error:" + oe.getErrorMessage());
                System.out.println("Kode Error:" + oe.getErrorCode());
                System.out.println("ID Permintaan:" + oe.getRequestId());
                System.out.println("ID Host:" + oe.getHostId());
            } catch (ClientException ce) {
                System.out.println("Terjadi ClientException, yang berarti klien mengalami "
                        + "masalah internal serius saat mencoba berkomunikasi dengan OSS, "
                        + "seperti tidak dapat mengakses jaringan.");
                System.out.println("Pesan Error:" + ce.getMessage());
            } finally {
                if (ossClient != null) {
                    ossClient.shutdown();
                }
            }
        }
    }
  • Penghapusan temporary

    Kode berikut menghapus temporary beberapa objek tanpa menentukan ID versi:

    import com.aliyun.oss.*;
    import com.aliyun.oss.common.auth.*;
    import com.aliyun.oss.common.comm.SignVersion;
    import com.aliyun.oss.model.DeleteObjectsRequest;
    import com.aliyun.oss.model.DeleteObjectsResult;
    import java.net.URLDecoder;
    import java.util.ArrayList;
    import java.util.List;
    
    public class Demo {
        public static void main(String[] args) throws Exception {
            // Pada contoh ini, digunakan titik akhir wilayah China (Hangzhou). 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. 
            String objectName = "exampledir/object";
            String object2Name = "exampledir/object2";
    
            // Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou.
            String region = "cn-hangzhou";
    
            // Buat instans OSSClient. 
            // Panggil metode shutdown untuk melepas sumber daya ketika OSSClient 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 {
                // Hapus beberapa objek sekaligus. 
                List<String> KeysList = new ArrayList<String>();
                KeysList.add(objectName);
                KeysList.add(object2Name);
                DeleteObjectsRequest request = new DeleteObjectsRequest(bucketName);
                request.setKeys(KeysList);
                // Kirim permintaan deleteObjects. 
                DeleteObjectsResult delObjResult = ossClient.deleteObjects(request);
    
                // Lihat hasil penghapusan. 
                for (String o : delObjResult.getDeletedObjects()) {
                    String keyName = URLDecoder.decode(o, "UTF-8");
                    System.out.println("hapus nama key: " + keyName);
                }
            } catch (OSSException oe) {
                System.out.println("Terjadi OSSException, yang berarti permintaan Anda sampai ke OSS, "
                        + "tetapi ditolak dengan tanggapan error karena suatu alasan.");
                System.out.println("Pesan Error:" + oe.getErrorMessage());
                System.out.println("Kode Error:" + oe.getErrorCode());
                System.out.println("ID Permintaan:" + oe.getRequestId());
                System.out.println("ID Host:" + oe.getHostId());
            } catch (ClientException ce) {
                System.out.println("Terjadi ClientException, yang berarti klien mengalami "
                        + "masalah internal serius saat mencoba berkomunikasi dengan OSS, "
                        + "seperti tidak dapat mengakses jaringan.");
                System.out.println("Pesan Error:" + ce.getMessage());
            } finally {
                if (ossClient != null) {
                    ossClient.shutdown();
                }
            }
        }
    }

Hapus objek yang namanya mengandung awalan tertentu

Kode berikut menghapus semua objek yang namanya mengandung awalan tertentu:

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

public class Demo {
    public static void main(String[] args) throws Exception {
        // Pada contoh ini, digunakan titik akhir wilayah China (Hangzhou). 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 awalan. 
        String prefix = "yourkeyPrefix";

        // Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou.
        String region = "cn-hangzhou";

        // Buat instans OSSClient. 
        // Panggil metode shutdown untuk melepas sumber daya ketika OSSClient 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 {
            // Daftar semua versi objek yang namanya mengandung awalan tertentu dan hapus semuanya. 
            String nextKeyMarker = null;
            String nextVersionMarker = null;
            VersionListing versionListing = null;
            do {
                ListVersionsRequest listVersionsRequest = new ListVersionsRequest()
                        .withBucketName(bucketName)
                        .withKeyMarker(nextKeyMarker)
                        .withVersionIdMarker(nextVersionMarker)
                        .withPrefix(prefix);

                versionListing = ossClient.listVersions(listVersionsRequest);
                if (versionListing.getVersionSummaries().size() > 0) {
                    List<DeleteVersionsRequest.KeyVersion> keyVersionsList = new ArrayList<DeleteVersionsRequest.KeyVersion>();
                    for (OSSVersionSummary ossVersion : versionListing.getVersionSummaries()) {
                        System.out.println("nama key: " + ossVersion.getKey());
                        System.out.println("versionid: " + ossVersion.getVersionId());
                        System.out.println("Apakah penanda hapus: " + ossVersion.isDeleteMarker());
                        keyVersionsList.add(new DeleteVersionsRequest.KeyVersion(ossVersion.getKey(), ossVersion.getVersionId()));
                    }
                    DeleteVersionsRequest delVersionsRequest = new DeleteVersionsRequest(bucketName).withKeys(keyVersionsList);
                    ossClient.deleteVersions(delVersionsRequest);
                }

                nextKeyMarker = versionListing.getNextKeyMarker();
                nextVersionMarker = versionListing.getNextVersionIdMarker();
            } while (versionListing.isTruncated());
        } catch (OSSException oe) {
            System.out.println("Terjadi OSSException, yang berarti permintaan Anda sampai ke OSS, "
                    + "tetapi ditolak dengan tanggapan error karena suatu alasan.");
            System.out.println("Pesan Error:" + oe.getErrorMessage());
            System.out.println("Kode Error:" + oe.getErrorCode());
            System.out.println("ID Permintaan:" + oe.getRequestId());
            System.out.println("ID Host:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Terjadi ClientException, yang berarti klien mengalami "
                    + "masalah internal serius saat mencoba berkomunikasi dengan OSS, "
                    + "seperti tidak dapat mengakses jaringan.");
            System.out.println("Pesan Error:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}

Referensi

  • Untuk informasi selengkapnya tentang operasi API yang dapat Anda panggil untuk menghapus objek, lihat DeleteObject.

  • Untuk informasi selengkapnya tentang operasi API yang dapat Anda panggil untuk menghapus beberapa objek, lihat DeleteMultipleObjects.