Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makalede Java için Azure Depolama istemci kitaplığıyla blobların nasıl silineceği ve bekletme süresi boyunca geçici olarak silinen blobların nasıl geri yükleneceği gösterilmektedir.
Önkoşullar
- Azure aboneliği - ücretsiz bir abonelik oluşturun
- Azure depolama hesabı - depolama hesabı oluşturma
- Java Development Kit (JDK) sürüm 8 veya üzeri (en iyi deneyim için sürüm 17'yi öneririz)
- Apache Maven bu örnekte proje yönetimi için kullanılır
Ortamınızı ayarlama
Mevcut bir projeniz yoksa, bu bölümde Java için Azure Blob Depolama istemci kitaplığıyla çalışmak üzere bir projenin nasıl ayarlanacağı gösterilir. Daha fazla bilgi için bkz. Azure Blob Depolama ve Java'yı kullanmaya başlama.
Bu makaledeki kod örnekleriyle çalışmak için projenizi ayarlamak için bu adımları izleyin.
Not
Bu makalede, örnek kodu derlemek ve çalıştırmak için Maven derleme aracı kullanılmaktadır. Gradle gibi diğer derleme araçları da Java için Azure SDK ile çalışır.
Paketleri yükleme
pom.xml
Dosyayı metin düzenleyicinizde açın. Bom dosyasını ekleyerek veya doğrudan bağımlılık ekleyerek paketleri yükleyin.
İçe aktarma deyimlerini ekleyin
Aşağıdaki import
deyimlerini ekleyin:
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;
Yetkilendirme
Yetkilendirme mekanizması, bir blobu silmek veya geçici olarak silinen bir blobu geri yüklemek için gerekli izinlere sahip olmalıdır. Microsoft Entra ID ile yetkilendirme için (önerilir), Azure RBAC yerleşik rolü Depolama Blob Verisi Katkıda Bulunanı veya üzeri gerekir. Daha fazla bilgi edinmek için Bkz. Blob Silme (REST API) ve Geri Alma Blobu (REST API) yetkilendirme kılavuzu.
İstemci nesnesi oluşturma
Bir uygulamayı Blob Depolama'ya bağlamak için bir BlobServiceClient örneği oluşturun.
Aşağıdaki örnek, DefaultAzureCredential
kullanarak bir BlobServiceClient
nesnesi oluşturmak için BlobServiceClientBuilder'ı kullanır ve gerekirse kapsayıcı ve blob istemcilerinin nasıl oluşturulacağını gösterir:
// 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>");
İstemci nesneleri oluşturma ve yönetme hakkında daha fazla bilgi edinmek için bkz . Veri kaynaklarıyla etkileşim kuran istemci nesneleri oluşturma ve yönetme.
Blobu silme
Not
Depolama hesabı için blob geçici silme etkinleştirildiğinde, istemci kitaplığı yöntemlerini kullanarak kalıcı silme işlemi gerçekleştiremezsiniz. Bu makaledeki yöntemler kullanılarak yumuşak bir şekilde silinen bir blob, blob sürümü veya anlık görüntü, saklama süresi dolana kadar kullanılabilir durumda kalır ve bu sürenin bitiminde kalıcı olarak silinir. Arka plandaki REST API işlemi hakkında daha fazla bilgi edinmek için bkz Blobu Silme (REST API).
Blobu silmek için aşağıdaki yöntemlerden birini çağırın:
Aşağıdaki örnek bir blobu siler:
public void deleteBlob(BlobClient blobClient) {
blobClient.delete();
}
Blobun ilişkili anlık görüntüleri varsa, blobu silmek için tüm anlık görüntülerini silmeniz gerekir. Aşağıdaki örnek, bir blobu ve anlık görüntülerini bir yanıtla siler:
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());
}
}
Yalnızca anlık görüntüleri silmek ve blob'un kendisini silmemek için parametre DeleteSnapshotsOptionType.ONLY
geçirebilirsiniz.
Silinen blobu geri yükleme
Blob'u geçici silme, sistemdeki silinen verileri belirli bir süre boyunca koruyarak tek bir blob'u ve sürümlerini, anlık görüntülerini ve meta verilerini yanlışlıkla silmelere veya üzerine yazmalara karşı korur. Saklama süresi boyunca, blob’u silindiği andaki durumuna geri yükleyebilirsiniz. Saklama süresi dolduktan sonra blob kalıcı olarak silinir. Bloblar için yumuşak silme hakkında daha fazla bilgi için Bloblar için geçici silme bölümüne bakınız.
Geçici olarak silinen bir blobu veya anlık görüntüyü geri yüklemek için Azure Depolama istemci kitaplıklarını kullanabilirsiniz.
Geçici olarak silinen blobu geri yükleme yönteminiz, depolama hesabınızda blob sürümü oluşturma özelliğinin etkinleştirilip etkinleştirilmediğine bağlıdır. tr-TR: Blob sürümü hakkında daha fazla bilgi için bkz Blob sürümü. Senaryonuza bağlı olarak aşağıdaki bölümlerden birine bakın:
Sürüm oluşturma devre dışı bırakıldığında geçici olarak silinen nesneleri geri yükleme
Silinen blobları geri yüklemek için aşağıdaki yöntemi çağırın:
Bu yöntem, geçici olarak silinen blobun içeriğini ve meta verilerini ve ilişkili geçici olarak silinen anlık görüntüleri geri yükler. Silinmemiş bir blob için bu yöntemi çağırmanın hiçbir etkisi yoktur.
public void restoreBlob(BlobClient blobClient) {
blobClient.undelete();
}
Sürüm oluşturma etkinleştirildiğinde geçici olarak silinen nesneleri geri yükleme
Depolama hesabı blob sürümü oluşturmayı etkinleştirecek şekilde yapılandırılmışsa, blobun silinmesi blobun geçerli sürümünün önceki sürüm olmasına neden olur. Sürüm oluşturma etkinleştirildiğinde geçici olarak silinen bir blobu geri yüklemek için, temel blob üzerinden önceki bir sürümü kopyalayın. Aşağıdaki yöntemi kullanabilirsiniz:
Bu yöntem, geçici olarak silinen blobun içeriğini ve meta verilerini ve ilişkili geçici olarak silinen anlık görüntüleri geri yükler. Silinmemiş bir blob için bu yöntemi çağırmanın hiçbir etkisi yoktur.
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());
}
Geçici olarak silinen blobları ve dizinleri geri yükleme (hiyerarşik ad alanı)
Önemli
Bu bölüm yalnızca hiyerarşik ad alanına sahip hesaplar için geçerlidir.
Başlamak için pom.xml dosyasını metin düzenleyicinizde açın. Aşağıdaki bağımlılık öğesini bağımlılık grubuna ekleyin.
<dependency> <groupId>com.azure</groupId> <artifactId>azure-storage-file-datalake</artifactId> <version>12.6.0</version> </dependency>
Ardından bu imports deyimlerini kod dosyanıza ekleyin.
Put imports here
Aşağıdaki kod parçacığı, adlı
my-file
geçici olarak silinmiş bir dosyayı geri yükler.Bu yöntem bir DataLakeServiceClient örneği oluşturduğunuzu varsayar. DataLakeServiceClient örneği oluşturmayı öğrenmek için Hesaba bağlanma bölümüne bakın.
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); }
Geçici olarak silinen öğeleri içeren dizini yeniden adlandırırsanız, bu öğelerin dizinle bağlantısı kesilir. Bu öğeleri geri yüklemek istiyorsanız, dizinin adını özgün adına geri döndürmeniz veya özgün dizin adını kullanan ayrı bir dizin oluşturmanız gerekir. Aksi takdirde, geçici olarak silinen öğeleri geri yüklemeyi denediğinizde bir hata alırsınız.
Kaynaklar
Java için Azure Blob Depolama istemci kitaplığını kullanarak blobları silme ve silinen blobları geri yükleme hakkında daha fazla bilgi edinmek için aşağıdaki kaynaklara bakın.
Kod örnekleri
REST API işlemleri
Java için Azure SDK, Azure REST API'sinin üzerinde derlenmiş kitaplıklar içerir ve tanıdık Java paradigmalarıyla REST API işlemleriyle etkileşim kurmanızı sağlar. Blobları silmek ve silinen blobları geri yüklemek için istemci kitaplığı yöntemleri aşağıdaki REST API işlemlerini kullanır:
- Blobu Silme (REST API)
- Blob'u Geri Yükle (REST API)
İstemci kütüphane kaynakları
Ayrıca bkz.
İlgili içerik
- Bu makale, Java için Blob Depolama geliştirici kılavuzunun bir parçasıdır. Daha fazla bilgi edinmek için Java uygulamanızı oluşturun kısmındaki geliştirici kılavuzu makalelerinin tam listesine bakın.