全部产品
Search
文档中心

Object Storage Service:Hapus objek (Java SDK V1)

更新时间:Nov 26, 2025

Topik ini menjelaskan cara menghapus satu objek, beberapa objek tertentu, objek dengan awalan nama tertentu, atau direktori beserta semua objek di dalamnya.

Peringatan

Berhati-hatilah saat melakukan operasi penghapusan. Objek yang telah dihapus tidak dapat dipulihkan.

Catatan penggunaan

  • Pada topik ini, titik akhir publik wilayah China (Hangzhou) digunakan. Untuk mengakses OSS dari layanan Alibaba Cloud lainnya di wilayah yang sama, gunakan titik akhir internal. Untuk detail 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.

  • Untuk menghapus objek, Anda harus memiliki izin oss:DeleteObject. Untuk informasi lebih lanjut, lihat Lampirkan kebijakan kustom ke Pengguna RAM.

Hapus satu objek

Kode berikut menunjukkan cara menghapus objek exampleobject.txt dari bucket examplebucket.

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 {
        // Titik akhir wilayah China (Hangzhou) digunakan dalam contoh ini. Tentukan titik akhir aktual Anda.
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // Peroleh kredensial akses dari variabel lingkungan. Sebelum menjalankan kode ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah disetel.
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // Masukkan nama bucket, misalnya examplebucket.
        String bucketName = "examplebucket";
        // Masukkan path lengkap objek. Path lengkap tidak boleh mencakup nama bucket.
        String objectName = "exampleobject.txt";
        // Masukkan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), setel Region ke cn-hangzhou.
        String region = "cn-hangzhou";

        // Buat instans OSSClient.
        // Saat instans OSSClient tidak lagi digunakan, panggil metode shutdown untuk melepaskan sumber daya.
        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 folder. Untuk menghapus folder, folder tersebut harus kosong.
            ossClient.deleteObject(bucketName, objectName);
        } catch (OSSException oe) {
            System.out.println("Terjadi OSSException, yang berarti permintaan Anda berhasil mencapai 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("Host ID:" + 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 secara batch

Anda dapat menghapus hingga 1.000 objek sekaligus secara manual. Anda dapat menghapus beberapa objek tertentu, objek dengan awalan tertentu, atau direktori beserta semua objek di dalamnya.

OSS juga mendukung penghapusan objek otomatis dengan mengonfigurasi aturan siklus hidup. Untuk informasi lebih lanjut, lihat Aturan siklus hidup berdasarkan waktu modifikasi terakhir.

Parameter untuk penghapusan batch

  • Parameter permintaan

    Parameter

    Deskripsi

    Metode

    Keys

    Objek yang akan dihapus.

    setKeys(List<String>)

    quiet

    Menentukan mode respons. Mode default adalah Mode rinci. Pilih mode sesuai kebutuhan.

    • Mode rinci (verbose): Jika quiet tidak disetel atau disetel ke false, daftar semua objek yang dihapus akan dikembalikan.

    • Mode senyap (quiet): Jika quiet disetel ke true, OSS tidak mengembalikan badan pesan.

    setQuiet(boolean)

    encodingType

    Jenis encoding untuk nama objek dalam respons. Hanya encoding URL yang didukung.

    setEncodingType(String)

  • Parameter respons

    Parameter

    Deskripsi

    Metode

    deletedObjects

    Hasil penghapusan.

    • Mode rinci: Mengembalikan daftar objek yang berhasil dihapus, termasuk objek yang tidak ada.

    • Mode senyap: Badan respons kosong.

    List<String> getDeletedObjects()

    encodingType

    Jenis encoding nama objek dalam deletedObjects. Jika nilai yang dikembalikan kosong, nama tidak di-encode.

    getEncodingType()

Hapus beberapa objek dengan nama tertentu

Kode berikut menunjukkan cara menghapus beberapa objek dengan nama tertentu.

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.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.List;

public class Demo {
    public static void main(String[] args) throws Exception {
        // Titik akhir wilayah China (Hangzhou) digunakan dalam contoh ini. Tentukan titik akhir aktual Anda.
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // Peroleh kredensial akses dari variabel lingkungan. Sebelum menjalankan kode ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah disetel.
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // Masukkan nama bucket, misalnya examplebucket.
        String bucketName = "examplebucket";
        // Masukkan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), setel Region ke cn-hangzhou.
        String region = "cn-hangzhou";

        // Buat instans OSSClient.
        // Saat instans OSSClient tidak lagi digunakan, panggil metode shutdown untuk melepaskan sumber daya.
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
        OSS ossClient = OSSClientBuilder.create()
        .endpoint(endpoint)
        .credentialsProvider(credentialsProvider)
        .clientConfiguration(clientBuilderConfiguration)
        .region(region)               
        .build();

        try {
            // Hapus objek-objek tersebut.
            // Masukkan path lengkap beberapa objek yang akan dihapus. Path lengkap tidak boleh mencakup nama bucket.
            List<String> keys = new ArrayList<String>();
            keys.add("exampleobjecta.txt");
            keys.add("testfolder/sampleobject.txt");
            keys.add("exampleobjectb.txt");

            DeleteObjectsResult deleteObjectsResult = ossClient.deleteObjects(new DeleteObjectsRequest(bucketName).withKeys(keys).withEncodingType("url"));
            List<String> deletedObjects = deleteObjectsResult.getDeletedObjects();
            try {
                for(String obj : deletedObjects) {
                    String deleteObj =  URLDecoder.decode(obj, "UTF-8");
                    System.out.println(deleteObj);
                }
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
        } catch (OSSException oe) {
            System.out.println("Terjadi OSSException, yang berarti permintaan Anda berhasil mencapai 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("Host ID:" + 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 dengan awalan tertentu atau dalam direktori

Kode berikut menunjukkan cara menghapus beberapa objek dengan awalan tertentu, atau direktori beserta semua objek di dalamnya.

Peringatan

Jika nilai parameter prefix dalam kode contoh berikut adalah string kosong atau NULL, semua objek dalam bucket akan dihapus. Berhati-hatilah saat menggunakan parameter ini.

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.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.List;

public class Demo {
    public static void main(String[] args) throws Exception {
        // Titik akhir wilayah China (Hangzhou) digunakan dalam contoh ini. Tentukan titik akhir aktual Anda.
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // Peroleh kredensial akses dari variabel lingkungan. Sebelum menjalankan kode ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah disetel.
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // Masukkan nama bucket, misalnya examplebucket.
        String bucketName = "examplebucket";
        // Untuk menghapus semua objek yang namanya memiliki awalan src, setel prefix ke src. Ini akan menghapus semua objek non-folder dengan awalan src, folder src, dan semua objek di dalam folder src.
        String prefix = "src";
        // Untuk menghapus hanya folder src dan semua objek di dalamnya, setel prefix ke src/.
        // String prefix = "src/";
        // Masukkan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), setel Region ke cn-hangzhou.
        String region = "cn-hangzhou";

        // Buat instans OSSClient.
        // Saat instans OSSClient tidak lagi digunakan, panggil metode shutdown untuk melepaskan sumber daya.
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
        OSS ossClient = OSSClientBuilder.create()
        .endpoint(endpoint)
        .credentialsProvider(credentialsProvider)
        .clientConfiguration(clientBuilderConfiguration)
        .region(region)               
        .build();

        try {
            // Daftar semua objek yang memiliki awalan tertentu, lalu hapus objek-objek tersebut.
            String nextMarker = null;
            ObjectListing objectListing = null;
            do {
                ListObjectsRequest listObjectsRequest = new ListObjectsRequest(bucketName)
                        .withPrefix(prefix)
                        .withMarker(nextMarker);

                objectListing = ossClient.listObjects(listObjectsRequest);
                if (objectListing.getObjectSummaries().size() > 0) {
                    List<String> keys = new ArrayList<String>();
                    for (OSSObjectSummary s : objectListing.getObjectSummaries()) {
                        System.out.println("key name: " + s.getKey());
                        keys.add(s.getKey());
                    }
                    DeleteObjectsRequest deleteObjectsRequest = new DeleteObjectsRequest(bucketName).withKeys(keys).withEncodingType("url");
                    DeleteObjectsResult deleteObjectsResult = ossClient.deleteObjects(deleteObjectsRequest);
                    List<String> deletedObjects = deleteObjectsResult.getDeletedObjects();
                    try {
                        for(String obj : deletedObjects) {
                            String deleteObj =  URLDecoder.decode(obj, "UTF-8");
                            System.out.println(deleteObj);
                        }
                    } catch (UnsupportedEncodingException e) {
                        e.printStackTrace();
                    }
                }

                nextMarker = objectListing.getNextMarker();
            } while (objectListing.isTruncated());
        } catch (OSSException oe) {
            System.out.println("Terjadi OSSException, yang berarti permintaan Anda berhasil mencapai 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("Host ID:" + 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();
            }
        }
    }
}

FAQ

Setelah saya menghapus satu objek menggunakan OSS SDK untuk Java, bagaimana cara memastikan bahwa objek tersebut telah dihapus?

Saat Anda menggunakan metode OSSClient deleteObject dalam OSS SDK untuk Java untuk menghapus objek, penghapusan berhasil jika tidak ada exception yang dilemparkan. Untuk memastikan objek telah dihapus, Anda dapat memanggil metode OSSClient doesObjectExist. Jika metode tersebut mengembalikan nilai false, objek tersebut telah dihapus. Untuk informasi lebih lanjut, lihat Tentukan apakah objek ada (Java SDK V1).

Referensi

  • Hapus satu objek

    Untuk informasi lebih lanjut tentang operasi API untuk menghapus satu objek, lihat DeleteObject.

  • Hapus beberapa objek

    • Untuk kode contoh lengkap penghapusan beberapa objek, lihat contoh GitHub.

    • Untuk informasi lebih lanjut tentang operasi API untuk menghapus beberapa objek, lihat DeleteMultipleObjects.