إنشاء إصدارات كائن ثنائي كبير الحجم وإدراجها في .NET

يؤدي تعيين إصدار كائن ثنائي كبير الحجم تلقائيا إلى إنشاء إصدار سابق من كائن ثنائي كبير الحجم في أي وقت يتم تعديله أو حذفه. عند تمكين تعيين إصدار كائن ثنائي كبير الحجم، يمكنك استعادة إصدار سابق من كائن ثنائي كبير الحجم لاسترداد بياناتك إذا تم تعديله أو حذفه عن طريق الخطأ.

للحصول على حماية مثالية للبيانات، توصي Microsoft بتمكين تعيين إصدار كائن ثنائي كبير الحجم والحذف المبدئي لكائن ثنائي كبير الحجم لحساب التخزين الخاص بك. لمزيد من المعلومات، راجع تعيين إصدار كائن ثنائي كبير الحجم والحذف المبدئي للكائنات الثنائية كبيرة الحجم.

تعديل كائن ثنائي كبير الحجم لتشغيل إصدار جديد

يوضح مثال التعليمات البرمجية التالي كيفية تشغيل إنشاء إصدار جديد باستخدام مكتبة عميل Azure Storage لـ ‎.NET، الإصدار 12.5.1 أو إصدار لاحق. قبل تشغيل هذا المثال، تأكد من تمكين تعيين الإصدار لحساب التخزين لديك.

ينشئ المثال كائنًا ثنائيًا كبير الحجم للكتلة، ثم يقوم بتحديث بيانات تعريف الكائن. يؤدي تحديث بيانات تعريف الكائن إلى إنشاء إصدار جديد. يسترد المثال الإصدار الأولي والإصدار الحالي، ويوضح أن الإصدار الحالي فقط يتضمن بيانات التعريف.

public static async Task UpdateVersionedBlobMetadata(BlobContainerClient blobContainerClient, 
                                                     string blobName)
{
    try
    {
        // Create the container.
        await blobContainerClient.CreateIfNotExistsAsync();

        // Upload a block blob.
        BlockBlobClient blockBlobClient = blobContainerClient.GetBlockBlobClient(blobName);

        string blobContents = string.Format("Block blob created at {0}.", DateTime.Now);
        byte[] byteArray = Encoding.ASCII.GetBytes(blobContents);

        string initalVersionId;
        using (MemoryStream stream = new MemoryStream(byteArray))
        {
            Response<BlobContentInfo> uploadResponse = 
                await blockBlobClient.UploadAsync(stream, null, default);

            // Get the version ID for the current version.
            initalVersionId = uploadResponse.Value.VersionId;
        }

        // Update the blob's metadata to trigger the creation of a new version.
        Dictionary<string, string> metadata = new Dictionary<string, string>
        {
            { "key", "value" },
            { "key1", "value1" }
        };

        Response<BlobInfo> metadataResponse = 
            await blockBlobClient.SetMetadataAsync(metadata);

        // Get the version ID for the new current version.
        string newVersionId = metadataResponse.Value.VersionId;

        // Request metadata on the previous version.
        BlockBlobClient initalVersionBlob = blockBlobClient.WithVersion(initalVersionId);
        Response<BlobProperties> propertiesResponse = await initalVersionBlob.GetPropertiesAsync();
        PrintMetadata(propertiesResponse);

        // Request metadata on the current version.
        BlockBlobClient newVersionBlob = blockBlobClient.WithVersion(newVersionId);
        Response<BlobProperties> newPropertiesResponse = await newVersionBlob.GetPropertiesAsync();
        PrintMetadata(newPropertiesResponse);
    }
    catch (RequestFailedException e)
    {
        Console.WriteLine(e.Message);
        Console.ReadLine();
        throw;
    }
}

static void PrintMetadata(Response<BlobProperties> propertiesResponse)
{
    if (propertiesResponse.Value.Metadata.Count > 0)
    {
        Console.WriteLine("Metadata values for version {0}:", propertiesResponse.Value.VersionId);
        foreach (var item in propertiesResponse.Value.Metadata)
        {
            Console.WriteLine("Key:{0}  Value:{1}", item.Key, item.Value);
        }
    }
    else
    {
        Console.WriteLine("Version {0} has no metadata.", propertiesResponse.Value.VersionId);
    }
}

إدراج إصدارات الكائن الثنائي كبير الحجم

لسرد إصدارات الكائن الثنائي كبير الحجم، حدد المعلمة BlobStates مع حقل الإصدار . يتم سرد الإصدارات من الأقدم إلى الأحدث.

يوضح مثال التعليمات البرمجية التالي كيفية إدراج إصدارات الكائنات الثنائية كبيرة الحجم.

private static void ListBlobVersions(BlobContainerClient blobContainerClient, 
                                           string blobName)
{
    try
    {
        // Call the listing operation, specifying that blob versions are returned.
        // Use the blob name as the prefix. 
        var blobVersions = blobContainerClient.GetBlobs
            (BlobTraits.None, BlobStates.Version, prefix: blobName)
            .OrderByDescending(version => version.VersionId).Where(blob => blob.Name == blobName);

        // Construct the URI for each blob version.
        foreach (var version in blobVersions)
        {
            BlobUriBuilder blobUriBuilder = new BlobUriBuilder(blobContainerClient.Uri)
            {
                BlobName = version.Name,
                VersionId = version.VersionId
            };

            if ((bool)version.IsLatestVersion.GetValueOrDefault())
            {
                Console.WriteLine("Current version: {0}", blobUriBuilder);
            }
            else
            {
                Console.WriteLine("Previous version: {0}", blobUriBuilder);
            }
        }
    }
    catch (RequestFailedException e)
    {
        Console.WriteLine(e.Message);
        Console.ReadLine();
        throw;
    }
}

نسخ إصدار كائن ثنائي كبير الحجم سابق عبر الكائن الثنائي كبير الحجم الأساسي

يمكنك إجراء عملية نسخ للترويج لإصدار عبر الكائن الثنائي كبير الحجم الأساسي الخاص به، طالما أن الكائن الثنائي كبير الحجم الأساسي في طبقة عبر الإنترنت (ساخنة أو باردة). يظل الإصدار، ولكن تتم الكتابة فوق وجهته بنسخة يمكن قراءتها وكتابتها.

يوضح مثال التعليمات البرمجية التالي كيفية نسخ إصدار كائن ثنائي كبير الحجم عبر الكائن الثنائي كبير الحجم الأساسي:

public static async Task<BlockBlobClient> CopyVersionOverBaseBlobAsync(
    BlockBlobClient client,
    string versionTimestamp)
{
    // Instantiate BlobClient with identical URI and add version timestamp
    BlockBlobClient versionClient = client.WithVersion(versionTimestamp);

    // Restore the specified version by copying it over the base blob
    await client.SyncUploadFromUriAsync(versionClient.Uri);

    // Return the client object after the copy operation
    return client;
}

الموارد

لمعرفة المزيد حول إدارة إصدارات كائن ثنائي كبير الحجم باستخدام مكتبة عميل Azure Blob Storage ل .NET، راجع الموارد التالية.

موارد مكتبة العميل

راجع أيضًا