全部产品
Search
文档中心

Object Storage Service:Hapus file (C++ SDK)

更新时间:Nov 30, 2025

Topik ini menjelaskan cara menghapus satu objek, beberapa objek yang ditentukan, objek dengan awalan nama tertentu, atau direktori beserta seluruh isinya.

Peringatan

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

Catatan penggunaan

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

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

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

Hapus satu file

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

#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;

int main(void)
{
    /* Inisialisasi informasi akun OSS. */
            
    /* Tetapkan yourEndpoint ke Endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), tetapkan Endpoint ke https://oss-cn-hangzhou.aliyuncs.com. */
    std::string Endpoint = "yourEndpoint";
    /* Tetapkan yourRegion ke wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), tetapkan wilayah ke cn-hangzhou. */
    std::string Region = "yourRegion";
    /* Tentukan nama bucket. Misalnya, examplebucket. */
    std::string BucketName = "examplebucket";
    /* Tentukan path lengkap objek. Misalnya, exampleobject.txt. Path lengkap tidak boleh mengandung nama bucket. */
    /* Untuk menghapus folder, tetapkan ObjectName ke nama folder tersebut. Jika foldernya tidak kosong, Anda harus menghapus semua objek di dalam folder tersebut terlebih dahulu sebelum dapat menghapus foldernya. */
    std::string ObjectName = "exampleobject.txt";

    /* Inisialisasi sumber daya jaringan. */
    InitializeSdk();

    ClientConfiguration conf;
    conf.signatureVersion = SignatureVersionType::V4;
    /* Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah disetel. */
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClient client(Endpoint, credentialsProvider, conf);
    client.SetRegion(Region);
   
    DeleteObjectRequest request(BucketName, ObjectName);

    /* Hapus file. */
    auto outcome = client.DeleteObject(request);

    if (!outcome.isSuccess()) {
        /* Tangani pengecualian. */
        std::cout << "DeleteObject gagal" <<
        ",code:" << outcome.error().Code() <<
        ",message:" << outcome.error().Message() <<
        ",requestId:" << outcome.error().RequestId() << std::endl;
        return -1;
    }

    /* Lepaskan sumber daya jaringan. */
    ShutdownSdk();
    return 0;
}

Hapus beberapa file secara batch

Anda dapat menghapus hingga 1.000 objek sekaligus secara manual, termasuk beberapa objek yang ditentukan, objek dengan awalan tertentu, atau direktori beserta seluruh isinya.

Saat menghapus beberapa file, hasilnya dikembalikan dalam salah satu dari dua mode berikut. Mode default adalah Mode rinci.

  • Mode rinci: Mengembalikan daftar semua file yang dihapus.

  • Mode dasar: Hanya mengembalikan daftar file yang gagal dihapus.

OSS juga mendukung penghapusan objek otomatis melalui konfigurasi aturan siklus hidup. Untuk informasi selengkapnya, lihat Aturan siklus hidup berdasarkan waktu modifikasi terakhir.

Hapus beberapa objek dengan nama yang ditentukan

Kode berikut menunjukkan cara menghapus beberapa objek dengan nama yang ditentukan.

#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;

int main(void)
{
    /* Inisialisasi informasi akun OSS. */
            
    /* Tetapkan yourEndpoint ke Endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), tetapkan Endpoint ke https://oss-cn-hangzhou.aliyuncs.com. */
    std::string Endpoint = "yourEndpoint";
    /* Tetapkan yourRegion ke wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), tetapkan wilayah ke cn-hangzhou. */
    std::string Region = "yourRegion";
    /* Tentukan nama bucket. Misalnya, examplebucket. */
    std::string BucketName = "examplebucket";

    /* Inisialisasi sumber daya jaringan. */
    InitializeSdk();

    ClientConfiguration conf;
    conf.signatureVersion = SignatureVersionType::V4;
    /* Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah disetel. */
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClient client(Endpoint, credentialsProvider, conf);
    client.SetRegion(Region);

    DeleteObjectsRequest request(BucketName);
    /* Tambahkan path lengkap objek yang akan dihapus. */
    request.addKey("yourObjectName1");
    request.addKey("yourObjectName2");
  
    /* Hapus file. */
    auto outcome = client.DeleteObjects(request);

    if (!outcome.isSuccess()) {
        /* Tangani pengecualian. */
        std::cout << "DeleteObjects gagal" <<
        ",code:" << outcome.error().Code() <<
        ",message:" << outcome.error().Message() <<
        ",requestId:" << outcome.error().RequestId() << std::endl;
        return -1;
    }

    /* Lepaskan sumber daya jaringan. */
    ShutdownSdk();
    return 0;
}

Hapus beberapa objek dengan awalan tertentu atau dalam direktori

Kode berikut menunjukkan cara menghapus beberapa objek dengan awalan tertentu, atau direktori beserta seluruh isinya.

Peringatan

Jika nilai parameter keyPrefix pada kode contoh berikut berupa string kosong atau null, semua file dalam bucket akan dihapus. Gunakan fitur ini dengan hati-hati.

#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;

int main(void)
{
    /* Inisialisasi informasi akun OSS. */
            
    /* Tetapkan yourEndpoint ke Endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), tetapkan Endpoint ke https://oss-cn-hangzhou.aliyuncs.com. */
    std::string Endpoint = "yourEndpoint";
    /* Tetapkan yourRegion ke wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), tetapkan wilayah ke cn-hangzhou. */
    std::string Region = "yourRegion";
    /* Tentukan nama bucket. Misalnya, examplebucket. */
    std::string BucketName = "examplebucket";
    /* Jika Anda ingin menghapus semua file yang memiliki awalan src, tetapkan awalan ke src. Setelah Anda menetapkan awalan ke src, semua file non-folder yang memiliki awalan src, folder src, serta semua file di dalam folder src akan dihapus. */
    std::string keyPrefix = "src";
    /* Jika Anda hanya ingin menghapus folder src dan semua file di dalamnya, tetapkan awalan ke src/. */
    /* std::string keyPrefix = "src/"; */

    /* Inisialisasi sumber daya jaringan. */
    InitializeSdk();

    ClientConfiguration conf;
    conf.signatureVersion = SignatureVersionType::V4;
    /* Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah disetel. */
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClient client(Endpoint, credentialsProvider, conf);
    client.SetRegion(Region);

    std::string nextMarker = "";
    bool isTruncated = false;
    do {
            /* Daftar file. */
            ListObjectsRequest request(BucketName);           
            request.setPrefix(keyPrefix);
            request.setMarker(nextMarker);
            auto outcome = client.ListObjects(request);

            if (!outcome.isSuccess()) {
                /* Tangani pengecualian. */
                std::cout << "ListObjects gagal" <<
                ",code:" << outcome.error().Code() <<
                ",message:" << outcome.error().Message() <<
                ",requestId:" << outcome.error().RequestId() << std::endl;
                break;
            }
            for (const auto& object : outcome.result().ObjectSummarys()) {
                DeleteObjectRequest request(BucketName, object.Key());
                /* Hapus file. */
                auto delResult = client.DeleteObject(request);
            }
            nextMarker = outcome.result().NextMarker();
            isTruncated = outcome.result().IsTruncated();
    } while (isTruncated);

    /* Lepaskan sumber daya jaringan. */
    ShutdownSdk();
    return 0;
}

Referensi

  • Untuk kode contoh lengkap yang digunakan untuk menghapus satu atau beberapa file, lihat contoh GitHub.

  • Untuk informasi selengkapnya mengenai operasi API yang digunakan untuk menghapus satu file, lihat DeleteObject.

  • Untuk informasi selengkapnya mengenai operasi API yang digunakan untuk menghapus beberapa file, lihat DeleteMultipleObjects.