.NET ile blobu silme ve geri yükleme

Bu makalede .NET 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

Ortamınızı ayarlama

Var olan bir projeniz yoksa, bu bölümde bir projenin .NET için Azure Blob Depolama istemci kitaplığıyla çalışacak şekilde nasıl ayarlanacağı gösterilir. Adımlar arasında paket yükleme, yönergeler ekleme using ve yetkili istemci nesnesi oluşturma yer alır. Ayrıntılar için bkz. Azure Blob Depolama ve .NET'i kullanmaya başlama.

Paketleri yükleme

Proje dizininizden komutunu kullanarak dotnet add package Azure Blob Depolama ve Azure Identity istemci kitaplıkları için paketleri yükleyin. Azure hizmetlerine parolasız bağlantılar için Azure.Identity paketi gereklidir.

dotnet add package Azure.Storage.Blobs
dotnet add package Azure.Identity

Yönerge ekleme using

Kod dosyanızın en üstüne şu using yönergeleri ekleyin:

using Azure.Identity;
using Azure.Storage.Blobs;
using Azure.Storage.Blobs.Models;
using Azure.Storage.Blobs.Specialized;

Bu makaledeki bazı kod örnekleri için ek using yönergeler gerekebilir.

İstemci nesnesi oluşturma

Bir uygulamayı Blob Depolama'ya bağlamak için bir BlobServiceClient örneği oluşturun. Aşağıdaki örnekte yetkilendirme için kullanarak DefaultAzureCredential bir istemci nesnesinin nasıl oluşturulacağı gösterilmektedir:

public BlobServiceClient GetBlobServiceClient(string accountName)
{
    BlobServiceClient client = new(
        new Uri($"https://{accountName}.blob.core.windows.net"),
        new DefaultAzureCredential());

    return client;
}

Bir .NET uygulamasına bağımlılık ekleme için bir hizmet istemcisi kaydedebilirsiniz.

Ayrıca, belirli kapsayıcılar veya bloblar için istemci nesneleri de oluşturabilirsiniz. İ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.

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 Verileri 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.

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 static async Task DeleteBlobAsync(BlobClient blob)
{
    await blob.DeleteAsync();
}

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 siler:

public static async Task DeleteBlobSnapshotsAsync(BlobClient blob)
{
    // Delete a blob and all of its snapshots
    await blob.DeleteAsync(snapshotsOption: DeleteSnapshotsOption.IncludeSnapshots);

    // Delete only the blob's snapshots
    //await blob.DeleteAsync(snapshotsOption: DeleteSnapshotsOption.OnlySnapshots);
}

Blob'un kendisini değil yalnızca anlık görüntüleri silmek için parametresini DeleteSnapshotsOption.OnlySnapshotsgeç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

Sürüm oluşturma etkinleştirilmediğinde silinen blobları geri yüklemek için aşağıdaki yöntemlerden birini çağırın:

Bu yöntemler geçici olarak silinen blobları ve bunlarla ilişkili silinmiş anlık görüntüleri geri yükler. Silinmemiş bir blob için bu yöntemlerden herhangi birinin çağrılmasının hiçbir etkisi yoktur. Aşağıdaki örnek, geçici olarak silinen tüm blobları ve bunların anlık görüntülerini bir kapsayıcıya geri yükler:

public static async Task RestoreBlobsAsync(BlobContainerClient container)
{
    foreach (BlobItem blob in container.GetBlobs(BlobTraits.None, BlobStates.Deleted))
    {
        await container.GetBlockBlobClient(blob.Name).UndeleteAsync();
    }
}

Geçici olarak silinen belirli bir anlık görüntüyü geri yüklemek için, önce temel blob üzerinde Geri Al veya Geri AlAsync'i çağırın, ardından istenen anlık görüntüyü temel blob üzerinden kopyalayın. Aşağıdaki örnek, bir blok blobunu en son oluşturulan anlık görüntüye geri yükler:

public static async Task RestoreSnapshotsAsync(
    BlobContainerClient container,
    BlobClient blob)
{
    // Restore the deleted blob
    await blob.UndeleteAsync();

    // List blobs in this container that match prefix
    // Include snapshots in listing
    Pageable<BlobItem> blobItems = container.GetBlobs(
        BlobTraits.None,
        BlobStates.Snapshots,
        prefix: blob.Name);

    // Get the URI for the most recent snapshot
    BlobUriBuilder blobSnapshotUri = new BlobUriBuilder(blob.Uri)
    {
        Snapshot = blobItems
            .OrderByDescending(snapshot => snapshot.Snapshot)
            .ElementAtOrDefault(0)?.Snapshot
    };

    // Restore the most recent snapshot by copying it to the blob
    await blob.StartCopyFromUriAsync(blobSnapshotUri.ToUri());
}

Sürüm oluşturma etkinleştirildiğinde geçici olarak silinen blobları 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öntemlerden birini kullanabilirsiniz:

Aşağıdaki kod örneğinde silinen blobun en son sürümünün nasıl alındığı ve temel bloba kopyalanarak en son sürümün nasıl geri yükleneceği gösterilmektedir:

public static void RestoreBlobWithVersioning(
    BlobContainerClient container,
    BlobClient blob)
{
    // List blobs in this container that match prefix
    // Include versions in listing
    Pageable<BlobItem> blobItems = container.GetBlobs(
        BlobTraits.None,
        BlobStates.Version,
        prefix: blob.Name);

    // Get the URI for the most recent version
    BlobUriBuilder blobVersionUri = new BlobUriBuilder(blob.Uri)
    {
        VersionId = blobItems.
            OrderByDescending(version => version.VersionId).
            ElementAtOrDefault(0)?.VersionId
    };

    // Restore the most recently generated version by copying it to the base blob
    blob.StartCopyFromUri(blobVersionUri.ToUri());
}

Kaynaklar

.NET 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

.NET için Azure SDK, Azure REST API'sinin üzerinde derlenmiş kitaplıklar içerir ve tanıdık .NET 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)

İstemci kitaplığı kaynakları

Ayrıca bkz.

  • Bu makale, .NET için Blob Depolama geliştirici kılavuzunun bir parçasıdır. Daha fazla bilgi edinmek için .NET uygulamanızı derleme makalelerinde geliştirici kılavuzu makalelerinin tam listesine bakın.