Aracılığıyla paylaş


Java ile blob silme ve geri yükleme

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

  • Bu makalede, Java için Azure Blob Depolama istemci kitaplığıyla çalışmak üzere ayarlanmış bir projeniz olduğu varsayılır. Paket yükleme, yönerge ekleme import ve yetkili istemci nesnesi oluşturma dahil olmak üzere projenizi ayarlama hakkında bilgi edinmek için bkz . Azure Depolama ve Java ile Çalışmaya Başlama.
  • Yetkilendirme mekanizmasının bir blobu silme veya geçici olarak silinmiş bir blobu geri yükleme izinleri olmalıdır. Daha fazla bilgi edinmek için aşağıdaki REST API işlemleri için yetkilendirme kılavuzuna bakın:

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, geçici olarak silinen blob, blob sürümü veya anlık görüntü saklama süresi dolana kadar kullanılabilir durumda kalır ve kalıcı olarak silinir. Temel alınan 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());
    }
}

Blob'un kendisini değil yalnızca anlık görüntüleri silmek için parametresini DeleteSnapshotsOptionType.ONLYgeç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. Blob geçici silme hakkında daha fazla bilgi için bkz . Bloblar için geçici silme.

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. Blob sürümü oluşturma hakkında daha fazla bilgi için bkz . Blob sürümü oluşturma. 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.

  1. 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>
    
  2. Ardından bu imports deyimlerini kod dosyanıza ekleyin.

    Put imports here
    
  3. Aşağıdaki kod parçacığı, adlı my-filegeç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 bkz. Hesaba bağlanma.

    
    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.

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)
  • Blobu Geri Alma (REST API)

Kod örnekleri

İstemci kitaplığı kaynakları

Ayrıca bkz.