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
- Azure-előfizetés – hozzon létre egyet ingyenesen
- Azure Storage-fiók – tárfiók létrehozása
- Java Development Kit (JDK) 8-es vagy újabb verzió (a legjobb élmény érdekében a 17-es verziót javasoljuk)
- Ebben a példában az Apache Maven a projektkezeléshez használatos
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 DefaultAzureCredential
hoz 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.
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>
Ezután adja hozzá ezeket az importálási utasításokat a kódfájlhoz.
Put imports here
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:
- Blob törlése (REST API)
- Undelete Blob (REST API)
Ügyfélkódtár erőforrásai
Lásd még
Kapcsolódó tartalom
- Ez a cikk a Java Blob Storage fejlesztői útmutatójának része. További információkért tekintse meg a Java-alkalmazás buildeléséhez kapcsolódó fejlesztői útmutatók teljes listáját.