Share via


Unzip memory stream and load into Azure blob container

Introduction

This article is used for getting memory stream of zip file, uncompress memory stream and load stream into Azure blob.
I am using Ionic.Zip namespace to uncompress the memory stream.I am reading storage credential from app.config

appconfig

I am using CloudStorageAccount class to configure storage account settings, CloudBlobClient class to reference of
Azure blob and CloudBlobContainer class to reference of Azure blob container.

C# Code to Get file stream of a Azure file share file

         
         public Stream GetFileStream(string connectionstring,string fileshare,string filename)
        {
            // Parse the connection string and return a reference to the storage account.
            CloudStorageAccount storageAccount = CloudStorageAccount.Parse(connectionstring);
            // Create a CloudFileClient object for credential access to File storage.
            CloudFileClient fileClient = storageAccount.CreateCloudFileClient();
            // Get a reference to the file share.
            CloudFileShare share = fileClient.GetShareReference(fileshare);
            if (share.Exists())
            {
                // Get a reference to the root directory for the share.
                CloudFileDirectory rootDir = share.GetRootDirectoryReference();
                foreach (CloudFile file in rootDir.ListFilesAndDirectories())
                {
                    if (file.Name==filename)
                    {
                        Stream mem = new MemoryStream();
                        file.DownloadToStream(mem);
                        return mem;
                    }
                }
            }
            return null;
        }
    

Unzipping memory stream of a zip file

 
      public byte[] UnzipFileInMemory(Stream Zipmem)
        {
            byte[] buffer = new byte[16 * 1024];
            Zipmem.Position = 0;
            using (MemoryStream ms = new MemoryStream())
            {
                int read;
                while ((read = Zipmem.Read(buffer, 0, buffer.Length)) > 0)
                {
                    ms.Write(buffer, 0, read);
                }

                using (var outputStream = new MemoryStream())
                using (var inputStream = new MemoryStream(ms.ToArray()))
                {
                    using (var zipInputStream = new ZipInputStream(inputStream))
                    {
                        zipInputStream.GetNextEntry();
                        zipInputStream.CopyTo(outputStream);
                    }
                    return outputStream.ToArray();
                }               
            }
        } 
   

Load memory stream to Azure blob container

 
      public bool UploadByteArrayToBlob(byte[] memdata,string connectionstring ,string blobcontainer,string blobname)
        {
            CloudStorageAccount storageAccount = CloudStorageAccount.Parse(connectionstring);
            CloudBlobClient blobClient = csa_storageAccount.CreateCloudBlobClient();
            CloudBlobContainer blobContainer = blobClient.GetContainerReference(blobcontainer);
            blobContainer.CreateIfNotExists();
            blobContainer.SetPermissions(new BlobContainerPermissions
            {
                PublicAccess = BlobContainerPublicAccessType.Blob
            });
            CloudBlockBlob blob = blobContainer.GetBlockBlobReference(blobname);
            blob.UploadFromByteArray(memdata, 0, memdata.Length);
            return true;
        } 
 

Required Namespace to Create Blob Container

 
      using Microsoft.Azure; // Namespace for Azure Configuration Manager
     using Microsoft.WindowsAzure.Storage; // Namespace for Storage Client Library
       using Microsoft.WindowsAzure.Storage.Blob; // Namespace for Blob storage
        using Microsoft.WindowsAzure.Storage.File; // Namespace for File storage
        using Microsoft.WindowsAzure.Storage.Auth;
  

Calling of method

 
      string strconnection = CloudConfigurationManager.GetSetting("StorageConnectionString");
        Console.WriteLine("Blob container ready to create ");
        Console.WriteLine(CreateBlobContainer(strconnection, "myblobcontainer"));
   

Points of Interest

This article explain each step to unzip memory stream and load memory stream to Azure blob container

History

No updates available