Удаление и восстановление большого двоичного объекта с помощью Java
В этой статье показано, как удалить большие двоичные объекты с помощью клиентской библиотеки служба хранилища Azure для Java и как восстановить обратимо удаленные большие двоичные объекты в течение периода хранения.
Необходимые компоненты
- Подписка Azure — создайте бесплатную учетную запись.
- Учетная запись хранения Azure — создайте такую учетную запись.
- Пакет средств разработки Java (JDK) версии 8 или более поздней версии (рекомендуется использовать версию 17 для оптимального взаимодействия)
- Apache Maven используется для управления проектами в этом примере
Настройка среды
Если у вас нет существующего проекта, в этом разделе показано, как настроить проект для работы с клиентской библиотекой Хранилище BLOB-объектов Azure для Java. Дополнительные сведения см. в статье "Начало работы с Хранилище BLOB-объектов Azure и Java".
Чтобы работать с примерами кода в этой статье, выполните следующие действия, чтобы настроить проект.
Примечание.
В этой статье используется средство сборки Maven для создания и запуска примера кода. Для работы с пакетами SDK Azure для Java есть и другие средства сборки, например Gradle.
Установка пакетов
Откройте файл pom.xml
в текстовом редакторе. Установите пакеты, включив файл BOM или включив прямую зависимость.
Добавление инструкций импорта
Добавьте следующие операторы import
:
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;
Авторизация
Механизм авторизации должен иметь необходимые разрешения для удаления большого двоичного объекта или восстановления обратимого удаленного большого двоичного объекта. Для авторизации с помощью идентификатора Microsoft Entra (рекомендуется), требуется встроенный участник данных хранилища BLOB-объектов хранилища ролей или более поздней версии. Дополнительные сведения см. в руководстве по авторизации для удаления BLOB-объектов (REST API) и отмены удаления BLOB-объектов (REST API).
Создание клиентского объекта
Чтобы подключить приложение к хранилищу BLOB-объектов, создайте экземпляр BLOBServiceClient.
В следующем примере используется BLOBServiceClientBuilder для создания BlobServiceClient
объекта с помощью DefaultAzureCredential
и показано, как создать клиенты контейнеров и BLOB-объектов при необходимости:
// 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>");
Дополнительные сведения о создании клиентских объектов и управлении ими см. в статье "Создание клиентских объектов и управление ими", взаимодействующих с ресурсами данных.
Удаление большого двоичного объекта
Примечание.
Если обратимое удаление BLOB-объектов включено для учетной записи хранения, невозможно выполнить постоянное удаление с помощью методов клиентской библиотеки. Используя методы, приведенные в этой статье, обратимо удаленный большой двоичный объект, версия большого двоичного объекта или моментальный снимок остается доступным до истечения срока хранения, в то время как оно будет окончательно удалено. Дополнительные сведения о базовой операции REST API см. в статье "Удаление BLOB-объектов (REST API)".
Чтобы удалить большой двоичный объект, вызовите один из следующих методов:
В следующем примере удаляется большой двоичный объект:
public void deleteBlob(BlobClient blobClient) {
blobClient.delete();
}
Если большой двоичный объект содержит связанные моментальные снимки, необходимо удалить все его моментальные снимки, чтобы удалить большой двоичный объект. В следующем примере удаляется большой двоичный объект и его моментальные снимки с ответом:
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());
}
}
Чтобы удалить только моментальные снимки, а не сам большой двоичный объект, можно передать параметр DeleteSnapshotsOptionType.ONLY
.
Восстановление удаленного BLOB-объекта
Обратимое удаление защищает BLOB-объект и его версии, а также моментальные снимки и метаданные от случайного удаления или перезаписи, сохраняя удаленные данные в системе в течение заданного периода времени. В течение срока хранения BLOB-объект можно восстановить до его состояния на момент удаления. По истечении срока хранения BLOB-объект удаляется окончательно. Дополнительные сведения об обратимом удалении BLOB-объектов см. в статье Обратимое удаление BLOB-объектов.
Клиентские библиотеки службы хранилища Azure позволяют восстановить обратимо удаленный BLOB-объект или моментальный снимок.
Восстановление обратимого удаленного большого двоичного объекта зависит от того, включена ли у вашей учетной записи хранения управление версиями БОЛЬШИХ двоичных объектов. Дополнительные сведения об управлении версиями BLOB-объектов см. в статье Управление версиями BLOB-объектов. См. один из следующих разделов в зависимости от вашего сценария:
Восстановление обратимо удаленных объектов, если управление версиями отключено
Чтобы восстановить удаленные BLOB-объекты, вызовите следующий метод:
Этот метод восстанавливает содержимое и метаданные обратимого удаленного большого двоичного объекта и всех связанных обратимо удаленных моментальных снимков. Вызов этого метода для большого двоичного объекта, который не был удален, не имеет никакого эффекта.
public void restoreBlob(BlobClient blobClient) {
blobClient.undelete();
}
Восстановление обратимо удаленных объектов при включении управления версиями
Если учетная запись хранения настроена для включения управления версиями BLOB-объектов, удаление большого двоичного объекта приводит к тому, что текущая версия большого двоичного объекта станет предыдущей. Чтобы восстановить обратимо удаленный BLOB-объект при включении управления версиями, скопируйте предыдущую версию в основной BLOB-объект. Можно использовать следующий метод:
Этот метод восстанавливает содержимое и метаданные обратимого удаленного большого двоичного объекта и всех связанных обратимо удаленных моментальных снимков. Вызов этого метода для большого двоичного объекта, который не был удален, не имеет никакого эффекта.
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());
}
Восстановление обратимо удаленных больших двоичных объектов и каталогов (иерархическое пространство имен)
Внимание
Сведения в этом разделе применимы только к учетным записям с иерархическим пространством имен.
Чтобы начать работу, откройте файл pom.xml в текстовом редакторе. Добавьте приведенный ниже элемент зависимости в группу зависимостей.
<dependency> <groupId>com.azure</groupId> <artifactId>azure-storage-file-datalake</artifactId> <version>12.6.0</version> </dependency>
Затем добавьте эти операторы импорта в файл кода:
Put imports here
Следующий фрагмент кода восстанавливает обратимо удаленный файл с именем
my-file
.Этот метод требует предварительного создания экземпляра DataLakeServiceClient. Инструкции по созданию экземпляра DataLakeServiceClient см. в разделе Подключение к учетной записи.
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); }
При переименовании каталога, содержащего обратимо удаленные элементы, эти элементы будут отключены от каталога. Чтобы восстановить эти элементы, необходимо восстановить исходное имя каталога или создать отдельный каталог с именем исходного каталога. В противном случае вы получите ошибку при попытке восстановить эти обратимо удаленные элементы.
Ресурсы
Дополнительные сведения об удалении больших двоичных объектов и восстановлении удаленных BLOB-объектов с помощью клиентской библиотеки Хранилище BLOB-объектов Azure для Java см. в следующих ресурсах.
Примеры кода
Операции REST API
Пакет SDK Azure для Java содержит библиотеки, которые создаются на основе REST API Azure, что позволяет взаимодействовать с операциями REST API через знакомые парадигмы Java. Методы клиентской библиотеки для удаления больших двоичных объектов и восстановления удаленных BLOB-объектов используют следующие операции REST API:
- Удаление больших двоичных объектов (REST API)
- Восстановление больших двоичных объектов (REST API)
Ресурсы клиентской библиотеки
См. также
Связанный контент
- Эта статья является частью руководства разработчика хранилища BLOB-объектов для Java. Дополнительные сведения см. в полном списке статей руководства разработчика по созданию приложения Java.