Megosztás a következőn keresztül:


Blob törlése és visszaállítása Java használatával

Ez a cikk bemutatja, hogyan törölhet blobokat a Java Azure Storage ügyfélkódtárával, és hogyan állíthatja vissza a helyreállíthatóan törölt blobokat a megőrzési időszak alatt.

Előfeltételek

Saját környezet beállítása

Ha nem rendelkezik meglévő projekttel, ez a szakasz bemutatja, hogyan állíthat be egy projektet a Java Azure Blob Storage ügyfélkódtárával való együttműködésre. További információ: Az Azure Blob Storage és a Java használatának első lépései.

A jelen cikkben szereplő példakódok használatához kövesse az alábbi lépéseket a projekt beállításához.

Feljegyzés

Ez a cikk a Maven buildelési eszközével hozza létre és futtatja a példakódot. Más buildelési eszközök, például a Gradle is együttműködnek a Java Azure SDK-val.

Csomagok telepítése

Nyissa meg a pom.xml fájlt a szövegszerkesztőben. Telepítse a csomagokat a BOM-fájllal, vagy egy közvetlen függőséget is beleértve.

Importálási utasítások hozzáadása

Adja hozzá a következő import-utasításokat:

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;

Engedélyezés

Az engedélyezési mechanizmusnak rendelkeznie kell a blob törléséhez vagy a helyreállíthatóan törölt blob visszaállításához szükséges engedélyekkel. A Microsoft Entra-azonosítóval való engedélyezéshez (ajánlott) az Azure RBAC beépített szerepkörű Storage Blob Data Közreműködő vagy újabb szerepkörre van szüksége. További információkért tekintse meg a Blob törlése (REST API) és az Undelete Blob (REST API) engedélyezési útmutatóját.

Ügyfélobjektum létrehozása

Ha egy alkalmazást a Blob Storage-hoz szeretne csatlakoztatni, hozzon létre egy BlobServiceClient-példányt.

Az alábbi példa a BlobServiceClientBuilder használatával DefaultAzureCredentialhoz létre objektumotBlobServiceClient, és bemutatja, hogyan hozhat létre tároló- és blobügyfeleket, ha szükséges:

// 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>");

Az ügyfélobjektumok létrehozásáról és kezeléséről további információt az adaterőforrásokat kezelő ügyfélobjektumok létrehozása és kezelése című témakörben talál.

Blob törlése

Feljegyzés

Ha a blob helyreállítható törlése engedélyezve van egy tárfiókhoz, nem hajthat végre végleges törlést ügyfélkódtár-metódusokkal. A cikkben ismertetett módszerekkel a helyreállíthatóan törölt blobok, blobverziók vagy pillanatképek a megőrzési időszak lejártáig elérhetők maradnak, és ekkor véglegesen törlődnek. A mögöttes REST API-művelettel kapcsolatos további információkért lásd a Blob törlése (REST API) című témakört.

Blob törléséhez hívja meg az alábbi módszerek egyikét:

Az alábbi példa egy blobot töröl:

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

Ha a blob rendelkezik társított pillanatképekkel, a blob törléséhez törölnie kell az összes pillanatképét. Az alábbi példa válaszsal törli a blobot és annak pillanatképeit:

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());
    }
}

Ha csak a pillanatképeket szeretné törölni, és magát a blobot nem, akkor átadhatja a paramétertDeleteSnapshotsOptionType.ONLY.

Törölt blob visszaállítása

A blob helyreállítható törlésével megóvhatja az egyéni blobokat és azok verzióit, pillanatképeit és metaadatait a véletlen törléstől és felülírástól, mivel ezzel a művelettel a rendszer egy meghatározott ideig még megőrzi a törölt adatokat. A megőrzési időszak alatt a blobot visszaállíthatja a törléskor érvényes állapotába. A megőrzési időszak lejárta után a blob véglegesen törlődik. A blobok helyreállítható törlésével kapcsolatos további információkért lásd a blobok helyreállítható törlését ismertető szakaszt.

Az Azure Storage-ügyfélkódtárak használatával helyreállíthatja a helyreállíthatóan törölt blobokat vagy pillanatképeket.

A helyreállíthatóan törölt blobok visszaállításának módjától függ, hogy a tárfiók engedélyezve van-e a blobok verziószámozása. A blobok verziószámozásával kapcsolatos további információkért lásd a Blob verziószámozását. A forgatókönyvtől függően tekintse meg az alábbi szakaszok egyikét:

Helyreállíthatóan törölt objektumok visszaállítása, ha a verziószámozás le van tiltva

A törölt blobok visszaállításához hívja meg a következő módszert:

Ez a módszer visszaállítja a helyreállíthatóan törölt blobok és a kapcsolódó helyreállíthatóan törölt pillanatképek tartalmát és metaadatait. A metódus nem törölt blob meghívásának nincs hatása.

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

Helyreállíthatóan törölt objektumok visszaállítása a verziószámozás engedélyezésekor

Ha egy tárfiók úgy van konfigurálva, hogy engedélyezze a blobok verziószámozását, a blob törlésével a blob aktuális verziója lesz az előző verzió. Ha vissza szeretne állítani egy helyreállíthatóan törölt blobot, ha engedélyezve van a verziószámozás, másolja az előző verziót az alapblobba. A következő módszert használhatja:

Ez a módszer visszaállítja a helyreállíthatóan törölt blobok és a kapcsolódó helyreállíthatóan törölt pillanatképek tartalmát és metaadatait. A metódus nem törölt blob meghívásának nincs hatása.

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());
}

Helyreállíthatóan törölt blobok és könyvtárak visszaállítása (hierarchikus névtér)

Fontos

Ez a szakasz csak hierarchikus névtérrel rendelkező fiókokra vonatkozik.

  1. Első lépésként nyissa meg a pom.xml fájlt a szövegszerkesztőben. Adja hozzá a következő függőségi elemet a függőségek csoportjához.

    <dependency>
      <groupId>com.azure</groupId>
      <artifactId>azure-storage-file-datalake</artifactId>
      <version>12.6.0</version>
    </dependency>
    
  2. Ezután adja hozzá ezeket az importálási utasításokat a kódfájlhoz.

    Put imports here
    
  3. Az alábbi kódrészlet visszaállít egy helyreállíthatóan törölt fájlt my-file.

    Ez a metódus feltételezi, hogy létrehozott egy DataLakeServiceClient-példányt . A DataLakeServiceClient-példányok létrehozásáról a Csatlakozás a fiókhoz című témakörben olvashat.

    
    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);
     }
    
    

    Ha átnevezi a helyreállíthatóan törölt elemeket tartalmazó könyvtárat, ezek az elemek le lesznek választva a címtárról. Ha vissza szeretné állítani ezeket az elemeket, vissza kell állítania a könyvtár nevét az eredeti nevére, vagy létre kell hoznia egy külön könyvtárat, amely az eredeti könyvtárnevet használja. Ellenkező esetben hibaüzenet jelenik meg, amikor megpróbálja visszaállítani a helyreállíthatóan törölt elemeket.

Források

Ha többet szeretne megtudni a blobok törléséről és a törölt blobok visszaállításáról a Java Azure Blob Storage ügyfélkódtárával, tekintse meg az alábbi erőforrásokat.

Kódminták

REST API-műveletek

Az Azure SDK for Java olyan kódtárakat tartalmaz, amelyek az Azure REST API-ra épülnek, lehetővé téve a REST API-műveletek használatát ismert Java-paradigmákon keresztül. A blobok törlésére és a törölt blobok visszaállítására szolgáló ügyfélkódtár-metódusok a következő REST API-műveleteket használják:

Ügyfélkódtár erőforrásai

Lásd még