Bagikan melalui


Menghapus dan memulihkan blob dengan Java

Artikel ini memperlihatkan cara menghapus blob dengan pustaka klien Azure Storage untuk Java, dan cara memulihkan blob yang dihapus sementara selama periode retensi.

Prasyarat

Menyiapkan lingkungan Anda

Jika Anda tidak memiliki proyek yang sudah ada, bagian ini memperlihatkan kepada Anda cara menyiapkan proyek untuk bekerja dengan pustaka klien Azure Blob Storage untuk Java. Untuk informasi selengkapnya, lihat Mulai menggunakan Azure Blob Storage dan Java.

Untuk bekerja dengan contoh kode dalam artikel ini, ikuti langkah-langkah ini untuk menyiapkan proyek Anda.

Catatan

Artikel ini menggunakan alat build Maven untuk membangun dan menjalankan kode contoh. Alat build lainnya, seperti Gradle, juga bekerja dengan Azure SDK untuk Java.

Memasang paket

Buka file pom.xml di editor teks Anda. Instal paket dengan menyertakan file BOM, atau termasuk dependensi langsung.

Menambahkan pernyataan impor

Tambahkan pernyataan import berikut:

import com.azure.core.http.rest.*;
import com.azure.core.util.*;
import com.azure.storage.blob.*;
import com.azure.storage.blob.models.*;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;

Authorization

Mekanisme otorisasi harus memiliki izin yang diperlukan untuk menghapus blob, atau untuk memulihkan blob yang dihapus sementara. Untuk otorisasi dengan MICROSOFT Entra ID (disarankan), Anda memerlukan peran bawaan Azure RBAC Kontributor Data Blob Penyimpanan atau yang lebih tinggi. Untuk mempelajari lebih lanjut, lihat panduan otorisasi untuk Hapus Blob (REST API) dan Batalkan Penghapusan Blob (REST API).

Membuat objek klien

Untuk menyambungkan aplikasi ke Blob Storage, buat instans BlobServiceClient.

Contoh berikut menggunakan BlobServiceClientBuilder untuk membangun BlobServiceClient objek menggunakan DefaultAzureCredential, dan menunjukkan cara membuat klien kontainer dan blob, jika diperlukan:

// Azure SDK client builders accept the credential as a parameter
// TODO: Replace <storage-account-name> with your actual storage account name
BlobServiceClient blobServiceClient = new BlobServiceClientBuilder()
        .endpoint("https://<storage-account-name>.blob.core.windows.net/")
        .credential(new DefaultAzureCredentialBuilder().build())
        .buildClient();

// If needed, you can create a BlobContainerClient object from the BlobServiceClient
BlobContainerClient containerClient = blobServiceClient
        .getBlobContainerClient("<container-name>");

// If needed, you can create a BlobClient object from the BlobContainerClient
BlobClient blobClient = containerClient
        .getBlobClient("<blob-name>");

Untuk mempelajari selengkapnya tentang membuat dan mengelola objek klien, lihat Membuat dan mengelola objek klien yang berinteraksi dengan sumber daya data.

Hapus blob

Catatan

Saat penghapusan sementara blob diaktifkan untuk akun penyimpanan, Anda tidak dapat melakukan penghapusan permanen menggunakan metode pustaka klien. Menggunakan metode dalam artikel ini, blob, versi blob, atau rekam jepret yang dihapus sementara tetap tersedia sampai periode retensi berakhir, saat itu dihapus secara permanen. Untuk mempelajari selengkapnya tentang operasi REST API yang mendasar, lihat Menghapus Blob (REST API).

Untuk menghapus blob, panggil salah satu metode berikut:

Contoh berikut menghapus blob:

public void deleteBlob(BlobClient blobClient) {
    blobClient.delete();
}

Jika blob memiliki rekam jepret terkait, Anda harus menghapus semua rekam jepretnya untuk menghapus blob. Contoh berikut menghapus blob dan rekam jepretnya dengan respons:

public void deleteBlobWithSnapshots(BlobClient blobClient) {
    Response<Boolean> response = blobClient.deleteIfExistsWithResponse(DeleteSnapshotsOptionType.INCLUDE, null,
            null,
            new Context("key", "value"));
    if (response.getStatusCode() == 404) {
        System.out.println("Blob does not exist");
    } else {
        System.out.printf("Delete blob completed with status %d%n", response.getStatusCode());
    }
}

Untuk menghapus hanya rekam jepret dan bukan blob itu sendiri, Anda dapat meneruskan parameter DeleteSnapshotsOptionType.ONLY.

Memulihkan blob yang dihapus

Penghapusan sementara blob melindungi blob individu dan versi, rekam jepret, serta metadatanya dari penghapusan atau penimpaan yang tidak disengaja dengan mempertahankan data yang dihapus dalam sistem selama jangka waktu tertentu. Selama periode retensi, Anda dapat memulihkan blob ke statusnya saat penghapusan. Setelah periode retensi kedaluwarsa, blob dihapus secara permanen. Untuk informasi selengkapnya tentang penghapusan sementara blob, lihat Penghapusan sementara untuk blob.

Anda dapat menggunakan pustaka klien Azure Storage untuk memulihkan blob atau rekam jepret yang dihapus untuk sementara.

Cara Anda memulihkan blob yang dihapus sementara tergantung pada apakah akun penyimpanan Anda mengaktifkan penerapan versi blob atau tidak. Untuk informasi selengkapnya tentang penerapan versi blob, lihat Penerapan versi blob. Lihat salah satu bagian berikut, bergantung pada skenario Anda:

Memulihkan objek yang dihapus untuk sementara saat penerapan versi dinonaktifkan

Untuk mengembalikan blob yang dihapus, panggil metode berikut:

Metode ini memulihkan konten dan metadata blob yang dihapus sementara dan rekam jepret yang dihapus sementara terkait. Memanggil metode ini untuk blob yang belum dihapus tidak berpengaruh.

public void restoreBlob(BlobClient blobClient) {
    blobClient.undelete();
}

Memulihkan objek yang dihapus sementara saat penerapan versi diaktifkan

Jika akun penyimpanan dikonfigurasi untuk mengaktifkan penerapan versi blob, menghapus blob menyebabkan versi blob saat ini menjadi versi sebelumnya. Untuk memulihkan blob yang dihapus sementara saat penerapan versi diaktifkan, salin versi sebelumnya ke blob dasar. Anda dapat menggunakan metode berikut:

Metode ini memulihkan konten dan metadata blob yang dihapus sementara dan rekam jepret yang dihapus sementara terkait. Memanggil metode ini untuk blob yang belum dihapus tidak berpengaruh.

public void restoreBlobVersion(BlobContainerClient containerClient, BlobClient blobClient){
    // List blobs in this container that match the prefix
    // Include versions in the listing
    ListBlobsOptions options = new ListBlobsOptions()
            .setPrefix(blobClient.getBlobName())
            .setDetails(new BlobListDetails()
                    .setRetrieveVersions(true));
    Iterator<BlobItem> blobItem = containerClient.listBlobs(options, null).iterator();
    List<String> blobVersions = new ArrayList<>();
    while (blobItem.hasNext()) {
        blobVersions.add(blobItem.next().getVersionId());
    }

    // Sort the list of blob versions and get the most recent version ID
    Collections.sort(blobVersions, Collections.reverseOrder());
    String latestVersion = blobVersions.get(0);

    // Get a client object with the name of the deleted blob and the specified version
    BlobClient blob = containerClient.getBlobVersionClient("sampleBlob.txt", latestVersion);

    // Restore the most recent version by copying it to the base blob
    blobClient.copyFromUrl(blob.getBlobUrl());
}

Memulihkan blob dan direktori yang dihapus sementara (namespace hierarkis)

Penting

.Bagian ini hanya berlaku untuk akun yang memiliki namespace hierarkis.

  1. Untuk memulai, buka file pom.xml di editor teks Anda. Tambahkan elemen dependensi berikut ke grup dependensi.

    <dependency>
      <groupId>com.azure</groupId>
      <artifactId>azure-storage-file-datalake</artifactId>
      <version>12.6.0</version>
    </dependency>
    
  2. Kemudian, tambahkan pernyataan impor ini ke file kode Anda.

    Put imports here
    
  3. Cuplikan berikut memulihkan file yang dihapus sementara bernama my-file.

    Metode ini mengasumsikan bahwa Anda telah membuat instans DataLakeServiceClient. Untuk mempelajari cara membuat instans DataLakeServiceClient, lihat Menghubungkan ke akun.

    
    public void RestoreFile(DataLakeServiceClient serviceClient){
    
        DataLakeFileSystemClient fileSystemClient =
            serviceClient.getFileSystemClient("my-container");
    
        DataLakeFileClient fileClient =
            fileSystemClient.getFileClient("my-file");
    
        String deletionId = null;
    
        for (PathDeletedItem item : fileSystemClient.listDeletedPaths()) {
    
            if (item.getName().equals(fileClient.getFilePath())) {
               deletionId = item.getDeletionId();
            }
        }
    
        fileSystemClient.restorePath(fileClient.getFilePath(), deletionId);
     }
    
    

    Jika Anda mengganti nama direktori yang berisi item yang dihapus sementara, item tersebut akan terputus dari direktori. Jika Anda ingin membuat item tersebut, Anda harus mengembalikan nama direktori ke nama asalnya atau membuat direktori terpisah yang menggunakan nama direktori asli. Jika tidak, Anda akan menerima kesalahan saat mencoba memulihkan item yang dihapus sementara tersebut.

Sumber

Untuk mempelajari selengkapnya tentang cara menghapus blob dan memulihkan blob yang dihapus menggunakan pustaka klien Azure Blob Storage untuk Java, lihat sumber daya berikut ini.

Sampel kode

Operasi REST API

Azure SDK untuk Java berisi pustaka yang dibangun di atas Azure REST API, memungkinkan Anda berinteraksi dengan operasi REST API melalui paradigma Java yang sudah dikenal. Metode pustaka klien untuk menghapus blob dan memulihkan blob yang dihapus menggunakan operasi REST API berikut:

Sumber daya pustaka klien

Lihat juga

  • Artikel ini adalah bagian dari panduan pengembang Blob Storage untuk Java. Untuk mempelajari lebih lanjut, lihat daftar lengkap artikel panduan pengembang di Membangun aplikasi Java Anda.